0

我正在使用spring boot并将其部署为独立tomcat中的战争。下面是我的应用程序类。

public class APIApplication extends SpringBootServletInitializer  {
    public static void main(String[] args) {

        configureApplication(new SpringApplicationBuilder()).run(args);
    }

    public static SpringApplicationBuilder configureApplication(SpringApplicationBuilder builder) {
        return builder.sources(APIApplication .class).properties(getProperties());
    }

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(APIApplication .class);
    }

    public static Properties getProperties() {
        Properties props = new Properties();
         props.setProperty("spring.config.location",
         "/home/config_directory/");
        props.setProperty("spring.config.name", "apiapplication");
        return props;

    }


}

但这不起作用并且不会从/home/config_directory/apiapplication.properties读取

任何帮助表示赞赏。

编辑

也试过

public static void main(String[] args) {
        System.setProperty("spring.config.location","/home/config_directory/");
        System.setProperty("spring.config.name", "apiapplication.properties");

        SpringApplication.run(DriverguidanceapiApplication.class, args);
        //configureApplication(new SpringApplicationBuilder()).run(args);
    }

也没有工作。

4

3 回答 3

3

无需手动配置哥们!!Spring 在这里帮助您使用@PropertySource注释。

我将分享我的代码片段,我在其中使用了您正在寻找的内容。

package XXXX;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;

/**
 * Created by Pratik Ambani.
 */
@Configuration
@PropertySource(value = {"classpath:default.properties", "classpath:application.properties"}, ignoreResourceNotFound = true, name = "myServerConfigs")
public class PropertySourceExample {

    @Value("${dev.baseURL}")
    private String localUrl;

    @Value("${sit.baseURL}")
    private String serverUrl;

    @Bean
    public static PropertySourcesPlaceholderConfigurer xxxpropertyConfig() {
        return new PropertySourcesPlaceholderConfigurer();
    }

    @Bean
    protected String database() {
        Resource resource = new Resource();
        resource.setUrl(restAPIUrl);
        return resource;
    }
}

但是等等,这些 dev.baseUrl 和 sat.baseUrl 值是什么?它们来自哪里?看看我的属性文件。

应用程序属性

dev.baseURL=http://localhost:7012

默认.properties

sit.baseURL=http://myserver:7012

瞧!!!我能够从多个文件中读取值。快乐编码。愿代码祝福你。:)

于 2017-10-02T10:35:44.543 回答
0

我建议您使用 @PropertySource 注释并自动装配一个 Enviroment 对象。检查示例:

    @PropertySource("file:/home/config_directory/")
    public class testClass{
        @Autowired
        private Environment environment;
        public DataSource dataSource(){

          BasicDataSource basicDataSource = new BasicDataSource();   
          basicDataSource.setDriverClassName(environment
                             .getProperty("database_manager.db.driver"));
          return basicDataSource;
      }
    }
于 2017-10-02T07:58:27.230 回答
0

正如Daniel Mora在https://stackoverflow.com/a/31027378/6503697中所解释的那样,使用 @PropertySource 并不是最佳选择。丹尼尔给出了一个很好的解决方案,但如果你想使用 spring.config.name 属性,请参阅我的回答:https ://stackoverflow.com/a/56445915/6503697

于 2019-06-04T14:39:49.783 回答