2015-03-16 8 views
20

mam jdbc pliki własności, które biorę od zewnętrznej konfiguracji usługi internetowej W bagażniku sprężyny w celu ustalenia mysql rekwizyty to proste jak dodawanie tych do application.properties:Jak Przestawianie application.properties Wiosna-rozruchowe programowo

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

Jak mogę zmienić te programy w mojej aplikacji?

samo dotyczy stojaków Wiosna-wsadowych:

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

Odpowiedz

24

Możesz dodać dodatkowe źródła własności w słuchacza cyklem reagującym na zdarzenia ApplicationEnvironmentPrepared.

Coś wzdłuż linii:

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

Następnie zarejestrować klasę w src/main/resources/META-INF/spring.factories:

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

ten pracował dla mnie jednak, jesteś w pewnym stopniu ograniczony, co możesz zrobić w tym momencie, ponieważ jest dość wcześnie w fazie uruchamiania aplikacji, musisz znaleźć sposób na uzyskanie potrzebnych wartości bez polegania na innych fasolach wiosennych itp.

+2

Dokładnie to, czego potrzebowałem. Jeśli pomaga komuś, możesz pobrać istniejące właściwości z pliku application.properties, używając "środowiska.getProperty ("") "i użyj go dalej w swoim kodzie. Skończyło się na budowaniu dynamicznej liczby hornetqueusa przez zapełnianie właściwości spring.hornetq.embedded.queues z liczby całkowitej zdefiniowanej w moim pliku właściwości. – Avnish

+0

Ten też działa dla mnie! Moim przypadkiem użycia jest dynamiczne odszyfrowanie hasła db po uruchomieniu aplikacji. – TonyLxc

+0

Działa świetnie! Dziękuję Ci! – user770119

0

Pod META-INF folderu stworzyć dokładnie to foldery i pliki: wiosna> partia> override> Dane-source-context.xml i w pliku xml upewnij się, aby zastąpić paramters chcesz tak:

<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> 

lub użyć JNDI jak to w pliku xml, aby uzyskać dostęp do pliku konfiguracyjnego zewnętrznego jak catalina.properties

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

Wystarczy dostarczyć inną opcję do tego wątku odsyłającego jak gdy zacząłem szukać odpowiedzi na moje wymogu ten wynik znalazł się wysoko na liście wyszukiwania, ale nie pokrył mojego przypadku użycia.

Szukałem programowo ustawić właściwość startową podczas rozruchu, ale bez potrzeby pracy z różnymi plikami XML/Config, które obsługuje sprężyna.

Najprostszym sposobem jest ustawienie właściwości w chwili zdefiniowania SpringApplication. Podstawowym przykładem poniżej ustawia port Tomcat 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

nie zastąpi to właściwości wewnętrznych, ale dobrym rozwiązaniem do dodania dodatkowych właściwości –

0

ten sposób można zastąpić application.properties programowo, jeśli trzeba.

1

Za pomocą tej metody w konfiguracji można ustawić domyślne właściwości.

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