Как внедрить DataSource (HikariCP) в класс Auto Configuration? - PullRequest
0 голосов
/ 17 октября 2018

Я пытаюсь использовать Spring Boot 2 + Spring Data + Custom Auto Configuration Classes, но по какой-то причине не могу ввести DataSource (предоставленный HikariCP) в третий класс.

@Configuration
@AutoConfigureOrder(Ordered.LOWEST_PRECEDENCE)
public class InitialAutoConfiguration {
 //Beans to load in theory first.
}


@Configuration
@AutoConfigureOrder(Ordered.LOWEST_PRECEDENCE)
@AutoConfigureAfter(InitialAutoConfiguration.class)
@EntityScan(basePackageClasses = Asset.class)
@EnableJpaRepositories(basePackageClasses = AssetRepository.class,
    repositoryBaseClass = BaseRepositoryImpl.class,
    repositoryFactoryBeanClass = ExtendedJpaRepositoryFactoryBean.class)
public class JpaAutoConfiguration { //Load Jpa Classes
}


@Configuration
@AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE)
@AutoConfigureAfter(JpaAutoConfiguration.class)
@ComponentScan(basePackages = {"com.xxx"})
public class ServiceConfiguration {
    @Inject
    private DataSource dataSource; //Datasource is null

    @Bean
    public DbPropertySourcesPlaceholderConfigurer dbPropertySourcesPlaceholderConfigurer() {
    DbPropertySourcesPlaceholderConfigurer placeholderConfigurer = new DbPropertySourcesPlaceholderConfigurer(dataSource);
    placeholderConfigurer.setPlaceholderPrefix("%{");
    placeholderConfigurer.setPlaceholderSuffix("}");
    return placeholderConfigurer;
    }
}

META-INF/spring.factories

org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.xetec.autoconfigure.InitialAutoConfiguration,\
  com.xetec.autoconfigure.JpaAutoConfiguration,\
  com.xetec.autoconfigure.ServiceConfiguration

Похоже, что мои классы загружаются перед классами данных Spring (DataSourceAutoConfiguration.Hikari).

Есть ли один способ сначала загрузить стартовые классы Spring Boot, а затем после моих пользовательских?

Спасибо

Ответы [ 2 ]

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

Ваше использование наивысшего и наименьшего приоритета неверно.Ваш ServiceConfiguration заказан с наивысшим приоритетом, что означает, что он будет оценен первым.

Вместо того, чтобы использовать абсолютный порядок, я бы использовал @AutoConfigureAfter(DataSourceAutoConfiguration.class)

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

Я не уверен, что следующее изменение может решить вашу проблему, но я сталкиваюсь с подобной проблемой

добавьте статические в ваш метод

@Bean
    public static DbPropertySourcesPlaceholderConfigurer dbPropertySourcesPlaceholderConfigurer() {
....
}
...