【问题标题】:Spring - Boot ConfigurationSpring - 引导配置
【发布时间】:2017-09-12 04:43:34
【问题描述】:

我有一个带有 application.properties 文件和 spring data jpa 的 spring boot 应用程序。 在应用程序中,我有一个外部依赖项,需要加载具有基于 xml 的配置的外部 Spring 项目的 Bean。 外部 xml 有自己的组件扫描和自己的 spring jpa 设置以与其他 DB 交互,在 Application.properties 文件中提供该 DB 属性,我正在使用 @ImportResources 将其 bean 注入父应用程序。但是当我在做这个 spring 数据时,jpa 没有加载接口存储库 bean。

问题是它加载了xml的bean,但是却加载了父项目的repository bean的bean。

Appconfig.class

@Configuration
@ComponentScan(basePackages = {"com.xx.xx"})
public class AppConfig {

}

ConfigProperties.class

@Configuration
@Import({AppConfig.class})
@ImportResource("classpath:xx-context.xml")
public class ConfigProperties {

}

xx-context.xml(示例)

<mvc:annotation-driven />

    <import resource="yy-repository.xml" />
    <import resource="classpath:zz-config.xml" />

    <context:component-scan base-package="com.yy.yy" />

    <bean id="bean_id" 
         //defination
    </bean>

    <bean>
        //defination
    </bean>

</beans>

MainApp.java

@SpringBootApplication
public class MainApp extends SpringBootServletInitializer {

异常

应用程序启动失败

说明:

com.xx.xx.services.impl.yyImpl 中的字段 AARepo 需要一个 bean 类型 'com.xx.x.repository.AARepo' 找不到。

动作

考虑在你的 配置。`

【问题讨论】:

    标签: java spring spring-boot


    【解决方案1】:

    AppConfigClass 的顶部使用@EnableAutoConfiguration

    【讨论】:

      【解决方案2】:

      Springboot 似乎看不到您的 Repo 类。你可以尝试添加这个: @EnableJpaRepositories("com.xx.x.repository") 给你主应用类?!

      ---更新---

      更新您的MainApp 中的完整配置。你可以试试这个吗?!

      @SpringBootApplication
      @EnableJpaRepositories("com.xx.x.repository")
      @EntityScan("com.xx.x.repository.entity")
      public class MainApp extends SpringBootServletInitializer {
      

      希望对您有所帮助。

      【讨论】:

      • 我试过这个还是不行。我觉得问题是@ImportResources 加载了其他依赖项目的组件和数据源,并且由于它有一个数据源设置,它无法为父项执行此操作
      • @user1626001:只需更新您的 MainApp 中的完整配置,您可以试试吗?!
      【解决方案3】:
      @Configuration
      @EnableTransactionManagement(proxyTargetClass = true)
      @EnableJpaRepositories(basePackages = {"com.arcvideo.cloudagent.repo", "com.arcvideo.cloudagent.customer"})
      @PropertySource("classpath:database.properties")
      
      public class DatabaseConfig {
      
          @Autowired
          private Environment env;
      
          @Bean(destroyMethod = "close")
          DataSource dataSource() {
              HikariConfig dataSourceConfig = new HikariConfig();
              dataSourceConfig.setPoolName("springHikariCP");
              dataSourceConfig.setConnectionTestQuery("SELECT 1");
              dataSourceConfig.setDataSourceClassName(env.getProperty("hibernate.connection.driver_class"));
              Properties dataSourceProperties = new Properties();
              dataSourceProperties.put("url", env.getProperty("hibernate.connection.url"));
              dataSourceProperties.put("user", env.getProperty("hibernate.connection.username"));
              dataSourceProperties.put("password", env.getProperty("hibernate.connection.password"));
              dataSourceConfig.setDataSourceProperties(dataSourceProperties);
      
              return new HikariDataSource(dataSourceConfig);
          }
      
          @Bean
          public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
              LocalContainerEntityManagerFactoryBean entityManagerFactory = new LocalContainerEntityManagerFactoryBean();
              entityManagerFactory.setDataSource(dataSource());
              entityManagerFactory.setPackagesToScan(env.getProperty("entitymanager.packagesToScan"));
      
              HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
              entityManagerFactory.setJpaVendorAdapter(vendorAdapter);
      
              Properties additionalProperties = new Properties();
              additionalProperties.put("hibernate.dialect", env.getProperty("hibernate.dialect"));
              additionalProperties.put("hibernate.cache.use_query_cache", env.getProperty("hibernate.cache.use_query_cache"));
              additionalProperties.put("hibernate.cache.use_second_level_cache", env.getProperty("hibernate.cache.use_second_level_cache"));
              additionalProperties.put("hibernate.cache.region.factory_class", env.getProperty("hibernate.cache.region.factory_class"));
              additionalProperties.put("hibernate.autoReconnect", env.getProperty("hibernate.autoReconnect"));
              additionalProperties.put("hibernate.hbm2ddl.auto", env.getProperty("hibernate.hbm2ddl.auto"));
              additionalProperties.put("hibernate.show_sql", env.getProperty("hibernate.show_sql"));
              additionalProperties.put("hibernate.format_sql", env.getProperty("hibernate.format_sql"));
              additionalProperties.put("javax.persistence.sharedCache.mode", env.getProperty("javax.persistence.sharedCache.mode"));
              additionalProperties.put("hibernate.generate_statistics", env.getProperty("hibernate.generate_statistics"));
              entityManagerFactory.setJpaProperties(additionalProperties);
      
              return entityManagerFactory;
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2020-03-04
        • 2021-02-24
        • 2016-08-06
        • 1970-01-01
        • 1970-01-01
        • 2020-12-15
        • 1970-01-01
        • 1970-01-01
        • 2018-12-14
        相关资源
        最近更新 更多