从jar外面加载配置文件
import org.mybatis.spring.annotation.MapperScan;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.config.PropertiesFactoryBean;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.cloud.netflix.hystrix.EnableHystrix;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.core.env.PropertiesPropertySource;
import org.springframework.core.env.StandardEnvironment;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
import org.springframework.web.client.RestTemplate;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
import java.io.File;
import java.io.IOException;
import java.util.Properties;
@SpringBootApplication
@EnableSwagger2
@EnableGlobalCors
@EnableWebLog
@EnableHystrix
public class SpringBootApp{
/*
public static void main(String[] args) {
SpringApplication.run(SpringBootApp.class,args);
}*/
private static final Logger LOGGER = LoggerFactory.getLogger(SpringBootApp.class);
public static void main(String[] args) throws IOException {
SpringApplication springApplicationBuilder = new SpringApplication(SpringBootApp.class);
Properties properties = getProperties();
StandardEnvironment environment = new StandardEnvironment();
environment.getPropertySources().addLast(new PropertiesPropertySource("micro-service", properties));
springApplicationBuilder.setEnvironment(environment);
springApplicationBuilder.run(args);
}
private static Properties getProperties() throws IOException {
PropertiesFactoryBean propertiesFactoryBean = new PropertiesFactoryBean();
ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
propertiesFactoryBean.setIgnoreResourceNotFound(false);
//获取jar所在目录
String parent = new File(VehicleExhEmifoApp.class.getProtectionDomain().getCodeSource().getLocation().getFile()).getParent();
int index = parent.indexOf(".jar");
if(index > 0){
parent = parent.substring(0, index + 4);
parent = new File(parent).getParent();
}
//加载可能存在的自定义的配置文件
String property = String.format("%s/config/application.properties", parent);
LOGGER.info(String.format("读取配置文件:%s", property));
File f = new File(property);
if(!f.exists()){
Properties prop = new Properties();
prop.load(VehicleExhEmifoApp.class.getResourceAsStream("/application.properties"));
return prop;
}
Resource fileSystemResource = resolver.getResource(property);
propertiesFactoryBean.setLocations(fileSystemResource);
propertiesFactoryBean.afterPropertiesSet();
return propertiesFactoryBean.getObject();
}
}
dockerFile写法
FROM java:latest
MAINTAINER docker_user
ADD SpringBootApp.jar /root/
RUN mkdir -p /root/config/
ADD application.properties /root/config/
WORKDIR /tmp
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo "Asia/shanghai" > /etc/timezone;
CMD ["nohup","java","-jar","/root/SpringBootApp.jar","&"]