自定义配置-通过属性文件外置配置
来源:互联网 发布:课堂游戏 知乎 编辑:程序博客网 时间:2024/06/05 03:01
引言
通过设置几个简单的配置属性的例子来覆盖自动配置。
最简单的使用属性的应用:设置开启或禁用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:
@Componentpublic class RequestRestUrl{ @Autowired private AnalysisGaugeSettings analysisGaugeSettings; public String buildResourceUrl(String url,String parameter){ return analysisGaugeSettings.getEventManage()+url+parameter; }}
AnalysisResultServiceImpl.java:
@Servicepublic 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或配置类。
举例来说,我们创建的安全配置是针对生产环境的,而自动配置的安全配置用在生产环境。
参看以下:
- 自定义配置-通过属性文件外置配置
- SpringBoot 通过属性文件外置配置
- Spring通过.properties文件引入属性配置
- 自定义属性,style文件的配置
- 配置外置Tomcat启动
- Tomcat配置外置路径
- Springboot 外置配置详解
- java通过配置属性文件连接Oracle数据库
- net中通过配置WebConfig设置文件上传的属性
- myeclipse的外置tomcat配置
- MacBook 外置键盘简单配置
- 通过通过分别配置 PagerStyle 和 PagerSettings 属性,自定义页导航的样式和设置
- oracle配置属性文件
- Webpart‘SiderBar---自定义配置属性
- android 自定义textview属性配置
- spring boot自定义属性配置
- android中通过自定义xml实现你需要的shape效果 xml属性配置
- android中通过自定义xml实现你需要的shape效果 xml属性配置
- 高速光耦6N137用于RS485通信的总结
- hdu 5877 树状数组 +离散化 +树
- 在Mockplus中,如何做鼠标悬停时菜单下拉的效果?
- Spring添加对缓存的支持
- fastjson中@jsonType注解的使用
- 自定义配置-通过属性文件外置配置
- vue路由切换拦截,在每次发生路由导航时检测用户是否登录
- 神经网络结构盘点Neural Networks Zoo
- NAT技术与代理服务器调研
- 6月17日最新雅思写作高分范文
- Ruby学习-数字和字符串
- shell 结构化命令之循环
- Maven依赖的配置
- 如何在更改全局JDK版本1.7.0情况下,让Presto使用JDK1.8.0呢?