文章目录
配置文件
1.Springboot读取配置文件
1.1 使用@Value 获取简单配置
配置文件: demo.properties/demo.yml
#端口配置
port=23001
# 。。。
代码中使用:Demo.java
Class Demo{
@Value("${port}")
private String port;
// ....
}
1.2 使用@ConfigurationProperties(prefix = “XXXX”)获取复杂配置(即映射成实体类)
配置文件:
data-upload:
animals:
- dog
- cat
- fisher
# 可以支持@Value
animalsList: aa,ss,dd
relations:
dog: wangcai
cat: maomi
fisher: huahua
# 不支持@Value
relations1: {
key1: value1, key2: value2}
代码中使用:
@ConfigurationProperties(prefix = "data-upload")
@Component
@Data
public class MyConfig {
List<String> animals;
HashMap<String, String> relations;
}
@Service
public class TsetConfig {
@Autowired
MyConfig myConfig;
@Value("${data-upload.animalsList}")
List<String> animals;
@PostConstruct
public void test_1(){
System.out.println(myConfig.getAnimals().toString());
System.out.println(myConfig.getRelations().toString());
System.out.println(animals.toString());
}
}
引入依赖:(不引入依赖会导致编译器报错"springboot configuration annotation processor not configured")
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
2.Springboot集成nacos配置中心
1.添加bootstrap.yml
#application.yml 配置文件转移到nacos配置中心
spring:
application:
name: access-init-adapter-config
cloud:
nacos:
discovery:
server-addr: nacos-server:8848
config:
server-addr: nacos-server:8848
file-extension: yml
group: ACCESSINITADAPTER_GROUP
# ext-config[0]:
# data-id: access-init-adapter-edge.properties
# group: ACCESSINITADAPTER_GROUP
# refresh: true
2.引入依赖
<!-- nacos依赖 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.1.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>0.2.1.RELEASE</version>
</dependency>
spring boot集成nacos config报错
NoClassDefFoundError: org/springframework/boot/context/properties/ConfigurationBeanFactoryMetadata
原因是我的spring boot版本是2.4.3 , nacos config的版本是0.2.7
两个版本不兼容导致,在spring boot 2.4之后删掉了ConfigurationBeanFactoryMetadata
将spring boot版本降级为2.3.9.RELEASE即可解决.
3.Springboot配置文件优先级
优先级如下
- 第一种是在执行命令的目录下建config文件夹,然后把配置文件放到这个文件夹下。(在jar包的同一个目录下建config文件夹,执行命令需要在jar包所在目录下才行)
- 第二种是直接把配置文件放到jar包的同级目录
- 第三种在classpath下建一个config文件夹,然后把配置文件放进去。
- 第四种是在classpath下直接放配置文件。
springboot默认是优先读取它本身同级目录下的一个config/application.properties文件的。在src/main/resource文件夹下创建的application.properties文件的优先级是最低的
所以springboot启动读取外部配置文件,只需要在外面加一层配置文件覆盖默认的即可,不用修改代码.
** 注:
- 配置文件名必须是application, 同一级别下properties的优先级高于yml
- 如果启动程序时指定配置文件路径,则程序运行时只读取指定的配置文件。指定配置文件不存在则报错,程序启动失败
4.java 将整个配置文件读取成Proerties
Properties properties = new Properties();
try {
InputStream in = new BufferedInputStream(new FileInputStream("src/main/resources/xxfwConsumer.properties"));
properties.load(in);
logger.info(properties.toString());
} catch (IOException e) {
e.printStackTrace();
logger.error("读取消费者配置文件失败!");
}