首页 > 其他分享 >Springboot 外置配置详解

Springboot 外置配置详解

时间:2022-09-28 15:01:07浏览次数:55  
标签:Profile Springboot spring 配置 boot 外置 详解 properties 属性


Springboot 外置配置


spring Boot 自动配置的bean提供了300多个用于微调的属性.当调整设置时,只需要在环境变量,Java系统属性,JNDI,命令行参数,属性文件进行配置 就好了.

举例:

假设我们想要禁止启动springboot应用时的 banner .有以下几种方法:

1.在属性文件中指定 application.properties

spring.main.show-banner=false

2.在 应用程序的命令行参数中指定

$ java -jar myapp.jar --spring.main.show-banner=false

3.还可以将属性设置为环境变量

如果你用的是bash或者zsh,可以使用 export 命令

$ export spring.main.show-banner=false

配置嵌入式服务器

从命令行运行springboot应用程序时,应用程序会启动一个嵌入式的服务器,监听8080端口.如果想要修改默认端口,
可以使用命令行参数

$ java -jar myapp.jar --server.port=80

配置日志

默认情况下,springboot会使用 Logback来记录日志,并用INFO级别输出到控制台.

使用其他日志替换掉Logback

一般来说,你不需要切换日志实现,Logback能很好满足你的需要.但是如果你决定要使用Log4j 或者Log4j2,

你只需要修改依赖:引入对应的日志实现的起步依赖,同时排除掉Logback 即可.

以maven为例:

在maven里,可以用 来排除传递依赖

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log</artifactId>
</exclusion>
</exclusions>
</dependency>

然后加入Log4j的起步依赖即可

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j</artifactId>
</dependency>

设置日志级别和日志输出文件位置:

在applecation.properties 中以logging开头.

在 idea中会有很好的提示

配置数据源

在配置文件中

########################
#数据库配置
##########################

spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

spring.jpa.properties.hibernate.hbm2ddl.auto=update
# 主要是指定生成表名的存储引擎为InneoDB
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
# 是否打印出自动生产的SQL,方便调试的时候查看
spring.jpa.show-sql= true

在自动配置 dataSource Bean的时候,Spring boot会使用这里的连接数据.

DataSource是一个连接池,如果Classpath下有Tomcat的连接池 DataSource,那么就会使用这个连接池,否则Spring Boot会在Classpath里查找一下连接池:

  • HikariCp
  • Commons DBCP
  • Commons DBCP2

这里列出的是自动配置支持的连接池.你还可以配置DataSource的Bean,使用你喜欢的各种连接池.

如果我们想要使用 druid 连接池,如何做呢,其实关于 druid,已经有一个起步依赖:

<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.0</version>
</dependency>

只需要添加这个依赖,Springboot就会自动检测Classpath下是否有druid存在,如果有,就是用它.

在一个类里收集属性

现在我们在 applecation.properties 中有一个属性值,以weixin开头

#####################
#在一个类里收集属性
######################

weixin.appid = 12346

我们要在Controller里获取这个属性值,现在我们考虑用一个属性类来获取所有与weixin相关的配置信息,

新建一个类 WeixinProperties.java

/**
* 收集配置文件的weixin 前缀属性
*
* @author itguang
* @create
@Component
//注入带 weixin 前缀的属性
@ConfigurationProperties(prefix = "weixin")
public class WeixinProperties


private String appid;

//提供getter 和 setter方法
public String getAppid() {
return appid;
}

public void setAppid(String appid) {
this.appid = appid;
}
}

因为使用了@Component注解,所以这个属性类是一个Bean,这样我们就可以在Controller里把它注入进来:

@RestController
public class WeixinController

@Autowired
private WeixinProperties weixinProperties;

@RequestMapping(value = "test")
public String test(){

return

使用 Profile进行配置

当应用程序需要部署到不同的运行环境中去,一些配置细节通常会有所不同.
比如数据库连接的细节在开发环境和测试环境就会不一样,在生产环境下又会不一样.
Spring Framework 从Spring3.1开始支持基于Profile的配置.
Profile是一种条件化配置,基于运行时激活的Profile,会使用或者激活不同的Bean或者配置类.

为了演示Profile的属性,假设我们希望针对生产环境和开发环境有不同的配置.该怎莫做呢?这取决于你是用的是属性文件配置还是YAML配置.

这里我们以属性配置文件为例

使用特定基于Profile的属性文件

如果你正在使用 application.properties ,可以创建两个额外的属性文件,遵循 application-{profile}.properties这种命名格式.

在日志这个例子里,开发环境的配置放在 application-devlopment.properties

logging.level.root=debug

生产环境的配置放在 application-production.properties

logging.level.root= warn

如何激活呢,在application.properties设置 ​​spring.profiles.active​​ 属性就能激活特定的Profile.

######################
#日志配置
#####################
# 设置激活特定的Profile

或者在命令行启动程序时,指定激活的Profile

$ java -jar myapp.jar --spring.profiles.active=devlopment

另外我们还可以在java配置类里面指定特定的Profile

/**
* 指定特定Profile的配置类
*
* @author itguang
* @create
@Configuration
@Profile("devlopment")
public class ProfileConfigTest
//...

意思是只有激活 devlopment 的Profile时,才会应用此配置类,如果 devlopment 对应的Profile
没有被激活的话就会忽略此配置.

需要注意的是,application.properties 属性文件中的配置对所有的Profile都生效.

覆盖自动配置其实很简单,就是显示的编写那些没有SpringBoot 时你需要的Spring配置.
Spring Boot的自动配置被设置为优先使用应用程序提供的配置,然后才轮到自己的自动配置.


标签:Profile,Springboot,spring,配置,boot,外置,详解,properties,属性
From: https://blog.51cto.com/u_13866611/5719434

相关文章

  • java中带符号十六进制转换成十进制详解
    publicvoidtest1(){StringstrHex="ffff";intia=Integer.parseInt(strHex,16);//不带符号十六进制转换十进制Sys......
  • 玩转SpringBoot之定时任务
    玩转SpringBoot之定时任务使用SpringBoot创建定时任务非常简单,目前主要有以下三种创建方式:一、基于注解(@Scheduled)二、基于接口(SchedulingConfigurer)前者相信大家......
  • 深入学习SpringBoot
    1.快速上手SpringBoot1.1SpringBoot入门程序开发SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程1.1.1IDEA创建Sp......
  • 一文详解深度学习中的Normalization:BN/LN/WN
    参考资料:https://mp.weixin.qq.com/s?__biz=MzU3NDgxMzI0Mw==&mid=2247504259&idx=3&sn=bcd5af6172a5dd77d29e9d5f15362078&chksm=fd2e34d7ca59bdc11ed2d8663916452293ab4......
  • SpringBoot热部署
    一、引言(devtools)在开发过程中,由于每次修改完项目中的类都需要重启服务才能看到运行的结果,对于开发调试很不友好,浪费时间,引入devtools工具可以快速启动项目,无需再次重启......
  • M1处理器的电脑xcode模拟器编译报错问题详解及解决方案
    在M1芯片的苹果电脑中使用Xcode编译模拟器时,可能会碰到如下报错:   原因是由于M1模拟器架构是arm64架构,而Intel芯片是x86_64的架构,从而导致编译出现了问题。这......
  • JavaScript面向对象详解
    JavaScript面向对象面向对象是一种编程思想(oop)。很多个具有相同属性和行为的对象就可以抽象为类,对象是类的一个实例。JavaScript在ECMAScript6中引入了类的概念。面向......
  • 计算机毕设选题新颖推荐 springboot+vue心理咨询预约系统 ssm校园心理咨询平台 java心
    ......
  • springboot+websocket
    springboot+websocket:先引入websocket的依赖包<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-we......
  • SpringBoot整合MyBatis
    配置准备引入依赖在pom.xml文件中引入数据库和mybatis相关依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-j......