WANG LH , Research & Development

Spring 经验

2021.05.31 22:05

Spring 实用技巧

总结项目经验的时候,提取的一些有用常用的spring技巧

Spring gradle依赖插件省略版本号

buildscript {
    dependencies {
        classpath("io.spring.gradle:dependency-management-plugin:$dependencyManagementVersion")
    }
}

plugins {
    id 'java-library'
}

group 'com.sea'
version '1.0-SNAPSHOT'

subprojects {
    repositories {
        mavenLocal()
        mavenCentral()
    }

    apply plugin: 'io.spring.dependency-management'
    dependencyManagement {
        imports {
            mavenBom "com.sea:dependency-management:1.0-SNAPSHOT"
        }
    }
    dependencies {    
        // springboot
        annotationProcessor("org.springframework.boot:spring-boot-configuration-processor")
        api("org.springframework.boot:spring-boot-autoconfigure")
        api "org.springframework.boot:spring-boot-starter-web"
        api("org.springframework.boot:spring-boot-starter-log4j2")
    }
}

很方便,通过maven bom还可以自定义自己的依赖库,可以看看工程总结中的这篇文章统一依赖管理

@ControllerAdvice

使用@ControllerAdvice处理全局异常,全局数据绑定,可以参考工程总结中的这两篇文章
接口异常封装
统计接口返回的数据类型

继承spring HandlerInterceptorAdapter实现自己的拦截器

可以查看实际应用日志,拦截了请求,输出请求相关log。

@ConfigurationProperties

项目中会经常讲属性配置到application.properties中,考虑下使用@ConfigurationProperties配置在代码中会很方便。

@Data
@ConfigurationProperties("my.biz")
@Configuration
public class MyProperties {
  private String env="dev";
  private boolean ifEnableSubscribe=false;
}

如果区分环境,还需要讲application-online.properties中配置

my.biz.env=online
my.biz.if-enable-subscribe=true

项目多数据源配置

#zoutfits数据库配置
spring.datasource.outfits.url=jdbc:mysql://mysqlhost:3306/zoutfits?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
spring.datasource.outfits.username=username
spring.datasource.outfits.password=password
spring.datasource.outfits.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.outfits.hikari.max-lifetime=600000

@Configuration
public class CoreDataSourceConfiguration {

  @Bean(name = "outfitsDataSourceProperties")
  @ConfigurationProperties(prefix = "spring.datasource.outfits")
  public DataSourceProperties outfitsDataSourceProperties() {
    return new DataSourceProperties();
  }

  @Bean(name = "outfitsDataSource")
  public DataSource outfitsDataSource(@Autowired @Qualifier("outfitsDataSourceProperties")
                                            DataSourceProperties outfitsDataSourceProperties) {
    return outfitsDataSourceProperties.initializeDataSourceBuilder().build();
  }

  @Bean(name = "outfitsJdbcTemplate")
  public JdbcTemplate outfitsJdbcTemplate(@Autowired @Qualifier("outfitsDataSource") DataSource dataSource) {
    return new JdbcTemplate(dataSource);
  }
}