Отключить / удалить источник данных весенней загрузки по профилю - PullRequest
0 голосов
/ 03 октября 2018

Используя конфигурацию yaml с весенней загрузкой, у меня есть источник данных, который выглядит следующим образом:

datasource:
  url: jdbc:postgresql://somehost/somedb
  username: username
  password: password
  hikari:
    connection-timeout: 250
    maximum-pool-size: 1
    minimum-idle: 0

Я могу успешно указать на разные БД в зависимости от профиля, но я бы хотел настроить профиль, который неиспользовать этот источник данных на всех.Однако когда я использую этот профиль, я получаю следующее:

***************************
APPLICATION FAILED TO START
***************************

Description:

Failed to auto-configure a DataSource: 'spring.datasource.url' is not specified and no embedded datasource could be auto-configured.

Reason: Failed to determine a suitable driver class

Как использовать этот источник данных в некоторых профилях, но не в других?

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

Вы можете пропустить компонент для определенных профилей, используя аннотацию `@Profile ("! Dev ")

Имена профилей также могут начинаться с префикса NOT, например,"! Dev ", чтобы исключить их изпрофиль

из документов здесь

Если заданный профиль имеет префикс оператора NOT (!), аннотированный компонент будет зарегистрирован, еслипрофиль не активен - например, с учетом @Profile ({"p1", "! p2"}) регистрация произойдет, если профиль 'p1' активен или если профиль 'p2' не активен.

Профили также можно настроить в XML - у тега есть атрибут «profile», который принимает значения соответствующих профилей через запятую: здесь

 <beans profile="dev">
  <bean id="devDatasourceConfig"
  class="org.baeldung.profiles.DevDatasourceConfig" />
</beans>
0 голосов
/ 04 октября 2018

Изменить на:

spring: 
   datasource:
      url: jdbc:postgresql://somehost/somedb
      username: username
      password: password
      hikari:
         connection-timeout: 250
         maximum-pool-size: 1
         minimum-idle: 0

Springboot по умолчанию работает с автоконфигурацией, но вы можете настроить, исключая некоторые классы автоконфигурации

Отредактируйте свою конфигурацию, чтобы пропустить автоконфигурацию:

@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class})

Создайте свой собственный источник данных по профилю

@Bean
  @Profile("dev")
  DataSource dataSourceDevProfile(org.springframework.core.env.Environment environment) throws Exception {
     return DataSourceBuilder.create().url("").driverClassName("").password("").username("").build();
   }

@Bean
@Profile("!dev")
DataSource dataSourceNoDev(org.springframework.core.env.Environment environment) throws Exception {
    return DataSourceBuilder.create().url(environment.getProperty("spring.datasource.url")).driverClassName("").password(environment.getProperty("spring.datasource.password")).username(environment.getProperty("spring.datasource.username")).build();
}

Или полностью программно

@Bean
DataSource dataSource2(org.springframework.core.env.Environment environment) throws Exception {
    if (environment.acceptsProfiles("dev")){
        //return datasource dev
    }else{
        //return datasource prod
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...