2017-10-02 14 views
0

私は春のブートを使用しており、スタンドアロンのtomcatの戦争として展開しています。以下は私のアプリケーションクラスです。外部のapplication.propertiesファイル名を変更するには?

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

から読み取れません。

EDIT

も試み

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); 
    } 

はあまりにも動作しませんでした。

+1

あなたのファイル名は 'apiapplication.properties'ですか、それから正確に 'spring.config.name'に渡してください。また、これらのプロパティーは非常に早い段階でJVMに渡されなければなりません(ドキュメントに従って)、-Dフラグを使ってJVMを実行し、そこで設定オプションを渡してみてください。それはここから読むことができます:https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html –

+0

はいファイル名はapiapplication.propertiesです – Ricky

+0

試しましたか?起動時に-DがJVMに渡されますか? –

答えて

1

手動構成バディの必要がありませんが!春は@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値とsit.baseUrl値は何ですか、それらはどこから来ていますか?私のプロパティファイルを見てください。

application.properties

dev.baseURL=http://localhost:7012 

default.properties

sit.baseURL=http://myserver:7012 

Voilla! 複数のファイルから値を読み取ることができます。 ハッピーコーディング。 5月はあなたを祝福します。 :)

0

@PropertySourceアノテーションを使用し、環境オブジェクトをオートワイヤすることをお勧めします。例を確認してください:

@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; 
     } 
    } 
1

あなたは、たとえば、次のコマンドを使用して、実行時に設定ファイル名を指定することができます

java --spring.config.location=yourConfigName.yml -jar yourJarName.jar 
+0

私はstatndalone tomcatにwarファイルとしてデプロイしています。 – Ricky

関連する問題