下面是关于“springboot如何引入外部yml配置文件”的完整攻略。
1.准备工作
在开始之前,确保您已经安装了jdk、maven以及您喜欢的文本编辑器或IDE工具。
2. 创建新的Spring Boot项目
首先在命令行中输入下面的命令,创建一个新的Spring Boot项目。
$ mvn archetype:generate -DgroupId=com.example -DartifactId=demo -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
在这里,我们选择了使用“maven-archetype-quickstart”原型来创建项目。
3. 引入外部yml配置文件
接下来,我们需要在项目中引入外部yml配置文件。
3.1 配置文件命名规则
通常情况下,我们将配置文件以“application.yml”或“application.properties”的名称存放在“src/main/resources”目录下。但是,为了引入外部yml配置文件,我们需要遵循一定的命名规则:
1.首先,我们需要确保存放配置文件的文件夹在classpath下。如果您的配置文件位于C:\config\application.yml,那么您需要在启动命令中添加-cp参数,以将该文件夹添加至classpath:
$ java -cp C:\config\ -jar demo.jar
或者在需要创建外部配置文件的项目中,将C:\config\application.yml 直接放到工程目录下。
2.其次,我们需要按照命名规则命名配置文件。如果您的应用程序的名称是“myapp”,那么您需要将配置文件命名为“myapp.yml”或“myapp.yaml”。
在本例中,为了演示引入外部yml配置文件,我们将创建一个名为“student”的Spring Boot应用程序,并将配置文件命名为“student.yml”。
3.2 添加配置文件依赖
接下来,我们需要添加一个配置文件依赖项,以便我们可以在代码中引用它。
在pom.xml文件中添加以下依赖项:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-yaml</artifactId>
</dependency>
3.3 创建配置类
我们需要一些SpringBoot配置来扫描外部的yml配置文件并将其加载到运行时环境中。
创建一个新的类YamlPropertySourceFactory
。
package com.example.demo.config;
import org.springframework.boot.env.YamlPropertySourceLoader;
import org.springframework.core.env.PropertySource;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.EncodedResource;
import org.springframework.core.io.support.PropertySourceFactory;
import java.io.IOException;
/**
* yml自定义加载器
*/
public class YamlPropertySourceFactory implements PropertySourceFactory {
@Override
public PropertySource<?> createPropertySource(String name, EncodedResource resource) throws IOException {
Resource resource1 = resource.getResource();
YamlPropertySourceLoader loader = new YamlPropertySourceLoader();
PropertySource<?> propertySource = loader.
load(resource1.getFilename(), resource.getResource()).get(0);
return propertySource;
}
}
3.4 配置文件信息存储类
接下来,我们需要创建一个用于存储配置文件信息的类。
package com.example.demo.model;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties(prefix = "student")
public class StudentConfigModel {
private String name;
private Integer age;
//省略getter setter
}
在这里,我们使用了@Component
注解将该类声明为Spring Bean,并使用@ConfigurationProperties
注解来指示将配置文件中以“student”前缀开始的属性值自动注入该类中。
具体的,如下的yml配置文件内容,name和age的属性值将自动注入到该类对应的属性中。
student:
name: Tom
age: 21
3.5 配置和使用
最后,我们需要在Spring Boot应用程序中配置这个类并使用它。
在application.yml
或student.yml
中添加以下配置:
spring:
profiles:
active: dev
接着在application-dev.yml
或者别的自己创建的文件中添加:
student:
name: Tim
age: 19
我们需要在Spring Boot应用程序的配置文件中添加以下代码:
spring:
profiles:
active: dev
management:
endpoints:
web:
exposure:
include: '*'
spring.config.import:
- optional:classpath:/config/
- optional:classpath:/
student:
name: 李四
age: 18
在这里,我们配置了激活“dev”配置文件,以及引入/config
文件夹下的配置文件。
在我们需要使用配置的类中,我们可以使用@Value
注解或者@Autowired
将其注入到其他bean中。
package com.example.demo.services;
import com.example.demo.config.YamlPropertySourceFactory;
import com.example.demo.model.StudentConfigModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment;
import org.springframework.core.io.support.EncodedResource;
import org.springframework.core.io.support.PropertySourceFactory;
import org.springframework.stereotype.Component;
import java.io.IOException;
@Component
public class StudentService {
@Autowired
private Environment env;
@Autowired
private StudentConfigModel studentConfigModel;
@Value("${student.name}")
private String name;
public void printConfig() {
System.out.println("通过@Value注入的name:" + name);
System.out.println("StudentConfigModel的name:" + studentConfigModel.getName());
System.out.println("Environment的name:" + env.getProperty("student.name"));
}
}
通过以上配置,我们就可以使用注入的方式,来得到自定义yml文件中的值。
这里我们提供了两个示例:
-
使用
@Value
注入配置值:使用该注解,注入值比较直接,但是只能针对非复杂类型的属性进行注入,如果属性过多,也比较繁琐。 -
使用自定义的
StudentConfigModel
类,使用该类,对自定义的配置文件属性值进行绑定注入,相比1而言,比较明了,但是需要新创建一个类绑定属性。 -
使用
Environment
来获取另外一种注入方式,可以灵活得到多个配置文件的信息,同时也能针对非复杂类型/复杂类型的属性进行注入的。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:springboot如何引入外部yml配置文件 - Python技术站