自定义配置-通过属性文件外置配置

引言

通过设置几个简单的配置属性的例子来覆盖自动配置。

最简单的使用属性的应用:设置开启或禁用Spring Boot的ascii-art Banner(商标)几种方式。

命令行:

$ java -jar demo-0.0.1-SNAPSHOT.jar --spring.main.show-banner=false

application.properties:

spring.main.show-banner=false

application.yml:

spring:
  main:
    show-banner: false

设置为环境变量。(如果用的是bash或者zsh,使用export命令):

$ export spring_main_show_banner=false

1.微调自动配置的Bean

(1)禁用模板缓存

对于开发者,可以避免修改模板后,需要重启用应用程序才会生效,不能实时的看到变更的效果。

注意:使用文件配置时,确保这个文件不会发布到生产环境,否则生产环境里的应用就无法享受模板缓存带来的性能提升了。

用命令行运行应用程序时,将其设置为命令行参数,只会禁用一次:

$ java -jar demo-0.0.1-SNAPSHOT.jar --spring.thymeleaf.cache=false

application.yml中,每次运行都会被禁用:

spring:
  thymeleaf:
    cache: false

设置环境变量。

$export spring_thymleaf_cache=false

其他Spring Boot支持的模板也能关闭模板缓存:

Freemarker::spring.freemarker.cache
Groovy:spring.groovy.template.cache
Velovity:spring.velocity.cache

(2)配置嵌入式服务器

从命令行运行或者(Spring Tool Suite)运行Spring Boot应用程序时,应用程序会启动一个嵌入式的服务器(默认是Tomcat),监听8080端口。

当运行多个应用程序时,需要配置不同的监听端口。

命令行设置,只生效一次:

$ java -jar demo-0.0.1-SNAPSHOT.jar --server.port=8000

application.yml:

server:
  port: 8000

除了端口,还希望服务器提供HTTPS服务。第一步就是用JDK的keytool工具创建一个密钥存储(keystore):

$ keytool -keystore mykeys.jks -genkey -alias tomcat -keyalg RSA

该工具除了其他无关紧要的问题,当问到密码时,记住选择。如选择letmein

在application.yml中,大多选择8443端口:

server:
  port: 8443
  ssl:
    key-store: file:///path/to/mykeys.jks
    key-store-password: letmein
    key-password: letmein

配置日志

默认情况下,Spring Boot 使用Logback(http://logback.qos.cn)来记录日志,并用INFO级别输出到控制台。

一般来说,不需要切换日志的实现。Logback能很好的满足需要。如果决定使用Log4j或者Log4j2,只需要修改依赖,引入对应该日志实现的起步不依赖,同时排除掉Logback。

配置数据源

可以显示配置自己的DataSource Bean,但通常并不用这么做,只需要简单的通过属性配置数据库的URL,身份信息等就可以了。一旦投放到生产环境,我们需要考虑更持久的数据库解决方案。

application.yml:

spring:
  datasource:
    url: jdbc:postgresql://172.18.24.12:5432/ecmsbj
    username: ecmsbj
    password: ecmsbj
    driver-class-name: org.postgresql.Driver
    tomcat: #默认使用tomcat连接池配置
      max-idle: 10 #数据库允许最大空闲连接数
      min-idle: 5 #最小空闲连接数
      initial-size: 5 #初始连接数
      max-active: 100 #最大激活链接数

数据库连接池:在自动配置DataSource Bean的时候,Spring Boot会使用这里的连接数据。DataSource Bean是一个连接池,如果Classpath里有Tomcat的连接池DataSource,那么就是用这个连接池。否则,Spring Boot 会在Classpath里查找一下连接池:

  • HikariCP
  • Commons DBCP
  • Commons DBCP2

这些都是自动配置的支持的连接池,还可以自己配置DataSource Bean,使用各种连接池。可以设置spring.datasource.jndi-name属性,从JNDI里查找DataSource:

spring:
  datasource:
    jndi-name: java:/comp/env/jdbc/demoDS

注意:一旦设置了spring.datasource.jndi-name属性,其他数据源连接属性都会被忽略,除非没有设置别的数据源连接属性。

应用程序Bean的配置外置

我们来看一段代码:

AnalysisGaugeSettings.java:

import org.springframework.boot.context.properties.ConfigurationProperties;

@ConfigurationProperties(prefix = "AnalysisGaugeSeeds")//属性注入
public class AnalysisGaugeSettings {

    //事件管理系统地址
    private String eventManage;

    public String getEventManage() {
        return eventManage;
    }

    public void setEventManage(String eventManage) {
        this.eventManage = eventManage;
    }


}

application.yml:

AnalysisGaugeSeeds:
  eventManage: http://172.18.24.13:8080/invokemock/api/v1

RequestRestUrl.java:

@Component
public class RequestRestUrl{

  @Autowired
  private AnalysisGaugeSettings analysisGaugeSettings;

  public String buildResourceUrl(String url,String parameter){
    return analysisGaugeSettings.getEventManage()+url+parameter;
  }
}

AnalysisResultServiceImpl.java:

@Service
public class AnalysisResultServiceImpl implements AnalysisResultService{

  @Autowired
  private RequestRestUrl requestRestUrl;

  @Override
  public String queryResultByType(){
  //...requestRestUrl.buildResourceUrl(*,*)
 }
}

AnalysisResultController.java:

@RestController
@RequestMapping(value="...",produces="application/json")
public class AnalysisResultController{

  @Autowired
  private AnalysisResultService analysisResultService;

 @RequestMapping(value="..",method="...",produces="application/json")
public ResponseEntity<List<AnalysisResult>> findAnalysisResultByType(){  
  //...analysisResultService.queryResultByType()
  }
}

Application.java:

@SpringBootApplication
@EnableConfigurationProperties(AnalysisGaugeSettings.class)
@ComponentScan({"...."})
public class Application{
 public static void main(String[] args){
     SpringApplication app=new SpringApplication(Application.class);
     app.run(args);
 }
}

仔细观察就会明白使用的方式,可程序之间调用的关系。

使用Profile进行配置,部署到不同的运行环境

Spring 3.1开始支持基于Profile的配置。Profile是一种条件化配置,基于运行时激活的Profile,使用或者忽略不同的Bean或配置类。

举例来说,我们创建的安全配置是针对生产环境的,而自动配置的安全配置用在生产环境。

参看以下:
1

2

3

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值