1、基本配置
在src/java/resources下创建application.properties或者application.yml文件
springboot会自动读取配置内容
以application.yml为例:
server:
port: 8082 #端口
context-path: /szl #访问前缀
yml格式的配置比properties要简洁,相同的部分不用重复书写。注意key的“:”后面要有一个空格。
根据以上配置,每次访问接口,url都要加上/szl前缀,并且端口改为8082
2、多环境配置
配置多环境配置文件,不同的环境可用不同的配置:
application-dev.yml:开发环境
application-test.yml:测试环境
application-prod.yml:生产环境
在默认配置application.yml文件中配置如下内容进行选择加载:
spring:
profiles:
active: dev #读取application-dev.yml的配置
配置在application.yml文件中内容对各种环境都起作用
3、读取配置属性
配置文件配置属性:
szl:
name: szl
要在类中引用该属性,有以下两种方式:
1、@Value注解方式:
@Value("${szl.name}")
private String name;
在类中使用@Value注解,name的值为szl
2、通过工具类读取:
pom.xml文件引入依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
创建工具类:ResourceUtil.java
@Configuration
@ConfigurationProperties(prefix="szl")
public class ResourceUtil {
private String name;
//getter and setter
}
在类中注入ResourceUtil,通过resourceUtil.getName可用获取到属性值:szl
@Autowired
private ResourceUtil resourceUtil;
resourceUtil.getName()//szl
还可以从指定的文件文件中读取:
在ResourceUtil上加上注解:@PropertySource(value="classpath:resource.properties")
3、使用工具类2:
PropertiesListener:初始化加载配置文件
public class PropertiesListener implements ApplicationListener<ApplicationStartedEvent> {
private String propertyFileName;
public PropertiesListener(String propertyFileName) {
this.propertyFileName = propertyFileName;
}
@Override
public void onApplicationEvent(ApplicationStartedEvent event) {
PropertiesUtils.loadAllProperties(propertyFileName);
}
}
PropertiesUtils:加载配置文件内容
public class PropertiesUtils {
public static Map<String, String> propertiesMap = new HashMap<>();
private static void processProperties(Properties props) throws BeansException {
propertiesMap = new HashMap<String, String>();
for (Object key : props.keySet()) {
String keyStr = key.toString();
try {
// PropertiesLoaderUtils的默认编码是ISO-8859-1,在这里转码一下
propertiesMap.put(keyStr, new String(props.getProperty(keyStr).getBytes("ISO-8859-1"), "utf-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (java.lang.Exception e) {
e.printStackTrace();
}
}
}
public static void loadAllProperties(String propertyFileName) {
try {
Properties properties = PropertiesLoaderUtils.loadAllProperties(propertyFileName);
processProperties(properties);
} catch (IOException e) {
e.printStackTrace();
}
}
public static String getProperty(String name) {
return propertiesMap.get(name).toString();
}
public static Map<String, String> getAllProperty() {
return propertiesMap;
}
}
Application修改为:
public static void main(String[] args) {
SpringApplication application = new SpringApplication(Application.class);
application.addListeners(new PropertiesListener("application.properties"));//需要读取的配置文件
application.run(args);
}
Constant:常量类,与配置文件属性对应:
public interface Constant {
interface Szl {
String SZL_NAME = "szl.name";
}
}
使用:
String name = PropertiesUtils.getProperty(Constant.Szl.SZL_NAME);