2015-03-16 27 views
20

ben application.properties için bu ekleme gibi bu kolay MySQL sahne ayarlamak için bahar bagajında ​​içinde dış yapılandırma web hizmeti almak jdbc mülkiyet dosyaları var:programlı

spring.datasource.url=jdbc:mysql://localhost/mydb 
spring.datasource.username=root 
spring.datasource.password=root 
spring.datasource.driver-class-name=com.mysql.jdbc.Driver 

Uygulamamdaki programlı uygulamaları nasıl geçersiz kılabilirim? Aynı

İlkbahar-toplu sahne için de geçerli:

database.driver=com.mysql.jdbc.Driver 
database.url=jdbc:mysql://localhost/mydv 
database.username=root 
database.password=root 

cevap

24

Sen ApplicationEnvironmentPrepared olaya tepki bir yaşam döngüsü dinleyici ek özellik kaynakları ekleyebilir.

public class DatabasePropertiesListener implements ApplicationListener<ApplicationEnvironmentPreparedEvent> { 
    public void onApplicationEvent(ApplicationEnvironmentPreparedEvent event) { 
    ConfigurableEnvironment environment = event.getEnvironment(); 
    Properties props = new Properties(); 
    props.put("spring.datasource.url", "<my value>"); 
    environment.getPropertySources().addFirst(new PropertiesPropertySource("myProps", props)); 
    } 
} 

Sonra src/main/resources/META-INF/spring.factories sınıfı kayıt: çizgisinde

şey

org.springframework.context.ApplicationListener=my.package.DatabasePropertiesListener 

Ancak bu, benim için çalıştı, Uygulama başlangıç ​​aşamasında oldukça erken olduğu için bu noktada ne yapabileceğiniz konusunda sınırlı bir çeşitsiniz, diğer bahar fasulyelerine güvenmeden ihtiyaç duyduğunuz değerleri elde etmenin bir yolunu bulmalısınız.

+2

Tam olarak neye ihtiyacım vardı. Herhangi bir kişiye yardımcı olursa, 'environment' kullanarak, varolan özellikleri application.properties'ten getirebilirsiniz.getProperty ("") 've kodunuzda daha fazla kullanın. Özellikler dosyamda tanımlanan bir tam sayıdan spring.hornetq.embedded.queues özelliğini doldurarak, hornetqueus'un dinamik sayısını oluşturmayı bitirdim. – Avnish

+0

Bu benim için de çalışıyor! Benim kullanım durumum, uygulama başladığında dinamik olarak db şifresini çözmektir. – TonyLxc

+0

Harika çalışıyor! Teşekkür ederim! – user770119

0

altında META-INF klasörü oluşturmak tam olarak bu klasör ve dosya: bahar> toplu> geçersiz kılma> veri kaynağı-context.xml ve xml dosyasında paramters böyle istiyor geçersiz kılmak için emin olun:

<bean id="dataSource" 
    class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
    <property name="driverClassName" value="${loader.jdbc.driver}" /> 
    <property name="url" value="${loader.jdbc.url}" /> 
    <property name="username" value="${loader.jdbc.username}" /> 
    <property name="password" value="${loader.jdbc.password}" /> 
</bean> 

<bean id="transactionManager" 
    class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 
    <property name="dataSource" ref="dataSource" /> 
</bean> 
benim gereksinimi için bir cevap aramaya başladığı olarak

veya sadece referans için bu konuya başka bir seçenek sunmak amacıyla

<jee:jndi-lookup id="dataSource" 
    jndi-name="java:comp/env/jdbc/loader-batch-dataSource" lookup-on-startup="true" 
    resource-ref="true" cache="true" /> 
15

catalina.properties gibi harici yapılandırma dosyasına erişmek için xml dosyasında böyle bir JNDI kullanmak Bu, arama listesinde yüksek çıktı ancak kullanım durumumu kapsamıyordu.

Başlangıçta ilkbahar önyükleme özelliğini programlı olarak ayarlamak için, ancak destekleri destekleyen farklı XML/Config dosyalarıyla çalışmaya gerek kalmadan arıyordum.

En kolay yol, SpringApplication öğesinin tanımlandığı zamanda özellikleri ayarlamaktır. Temel Aşağıdaki örnekte 1.3 EnvironmentPostProcessor bu amaç için kullanılabilir bahar çizme yana 9999

@SpringBootApplication 
public class Demo40Application{ 

    public static void main(String[] args){ 
     SpringApplication application = new SpringApplication(Demo40Application.class); 

     Properties properties = new Properties(); 
     properties.put("server.port", 9999); 
     application.setDefaultProperties(properties); 

     application.run(args); 
    } 
} 
+1

bu, dahili özellikleri geçersiz kılmaz, ancak ek özellikler eklemek için iyi bir çözümdür –

0

Bu size varsa programlama yoluyla application.properties geçersiz kılabilir nasıl.

public static void main(String[] args) { 
    SpringApplication app = new SpringApplication(Restdemo1Application.class); 
    app.setAdditionalProfiles("dev"); 
    // overrides "application.properties" with "application-dev.properties" 
    app.run(args); 

} 
1

Yapılandırmanızdaki bu Yöntemle, varsayılan özellikleri ayarlayabilirsiniz.

@Override 
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { 
     return application.sources(Application.class) 
       .properties("propertyKey=propertyValue"); 
}