У меня есть приложение пружины, настроенное с помощью аннотаций. Вот часть моей конфигурацииизменить исходный адрес источника во время работы весной
@Configuration
@EnableTransactionManagement
public class JpaSpringConfiguration {
@Bean(destroyMethod = "close")
@Lazy
@Primary
public BasicDataSource dataSource(@Value("${statistics.hostname}") String statisticsHostname) {
final BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName("org.postgresql.Driver");
String url = String.format("jdbc:postgresql://%s:5432/statistics-db", statisticsHostname);
dataSource.setUrl(url);
....
return dataSource;
}
@Bean
public static PropertyPlaceholderConfigurer propertyPlaceholderConfigurer() {
final PropertyPlaceholderConfigurer placeholderConfigurer = new PropertyPlaceholderConfigurer();
placeholderConfigurer.setSystemPropertiesMode(SYSTEM_PROPERTIES_MODE_OVERRIDE);
Properties properties = new Properties();
properties.setProperty("statistics.hostname", "localhost");
placeholderConfigurer.setProperties(properties);
return placeholderConfigurer;
}
До недавнего времени мы не имели конфигурации XML
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
<property name="properties">
<props>
<prop key="statistics.hostname">localhost</prop>
</props>
</property>
</bean>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" lazy-init="true" destroy-method="close">
<property name="driverClassName" value="org.postgresql.Driver" />
<property name="url" value="jdbc:postgresql://${statistics.hostname}:5432/statistics-db" />
<property name="username" value="user" />
<property name="password" value="password" />
</bean>
Когда пользователь выбрал другой сервер для подключения к мы устанавливаем системное свойство и замкнутый контекст приложения и обновилась
System.setProperty("statistics.hostname", hostname)
applicationContext.close()
applicationContext.refresh()
Это не работает, когда я использую конфигурацию аннотаций. Мои вопросы:
- Почему это не работает?
- Как избавиться от установки имени хоста через системное свойство вообще?
EDIT: Я только что узнал, что я забыл $ {} вокруг имени параметра в методе dataSource(). Так что теперь это работает, но вопрос 2 все еще остается.
Что такое переменная 'statHostname' в конфигурации аннотации и как она инициализируется? –
Это параметр метода dataSource(). Я скопировал его неправильно. –