内部读取配置文件
相信很多SpringBoot初学者一般对于SpringBoot读取配置文件的方式最为熟悉的就是内部配置文件直接使用application.properties里面的属性然后利用@Configuration这个注解直接用@Value读取配置文件信息。
但是往往在实际开发中,项目真正上线和部署不太建议使用内部配置文件。
既然这样,那么我们必须要知道如何使用外部配置文件灵活启动项目。
外部Jar包方式读取配置文件 --启动命令读取
使用命令 java -jar springBootDemo-0.0.1-SNAPSHOT.jar --spring.config.location=D:\Jayson\config\application.properties (配置文件路径)
像这样命令启动只能指定一个配置文件,暂时还未知怎样指定一个目录。
外部Jar包方式读取配置文件 --优先级最高的方式
如果把配置文件建立一个文件夹,全部放入一个文件夹下,然后与jar包同级,直接启动。则是会最优先级读取这个配置文件。当然,如果优先级最高的会覆盖了他内部的或者优先级比他低的配置文件,但是如果没有,他还是会读取到内部或者那些优先级低的配置文件,也就是说互补。如果最高级有那就使用最高级的,没有则继续读取下级的。
外部Jar包方式读取配置文件 --优先级第二级的方式
同样类似于以上的配置方式,不同之处在于不用建立文件夹,而且这样显得紊乱,优先级最低的当然也就是上述部分说的在内部配置的方式
外部War包方式读取配置文件
SpringBoot的war包打包方式相信多数小伙伴也是会了,即是移除内部的tomcat,打包方式的war标签原本是jar的改为war。
很多人的打成war包都要加上maven的这个插件,但是我这个项目移除掉了也没有影响,正常启动。具体原因没有深究。小伙伴们还是百度吧。不行就加上,行的话就不用加
接下来主要就是怎么把配置文件加载到spring boot中了,我这里主要就是重写configure的方法,然后找到配置文件路径,然后读到springboot中就可以同样直接使用@Value直接获取配置文件值了。
package com.company.project;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.context.annotation.Bean;
import org.springframework.scheduling.annotation.EnableAsync;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;
import java.util.concurrent.ConcurrentHashMap;
@EnableAsync
@SpringBootApplication
public class Application extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
String configDir = System.getProperty("configDir");
System.out.println("-------------------------------------"+configDir);
Properties properties = new Properties();
try {
properties.load(new FileInputStream(new File(configDir + "\\application.properties")));
properties.load(new FileInputStream(new File(configDir + "\\application-dev.properties")));
System.getProperties().putAll(properties);
} catch (IOException e) {
e.printStackTrace();
}
return builder.sources(Application.class);
}
}
但是还有一点就是配置文件是怎么读的,路径在哪呢?
在中(catalina.bat)中108行编辑一下即可
set title=iline-web
set JAVA_OPTS=%JAVA_OPTS% -DconfigDir=D:\jayson\config -Dredis.config.type=file
set JRE_HOME=D:\Program Files\Java\jdk1.8.0_181\jre
setlocal
如此,war包读取外部配置文件的方式即已完成。如果是多个配置文件,就如上所示
多拼接一个配置文件名即可
关注微信关注公众号分享更多知识与内容!