当前位置: 首页 > 知识库问答 >
问题:

Spring-引导配置

屠钊
2023-03-14

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

问题是它加载了xml的bean,但无法加载父项目的存储库bean。

Appconfig。班

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

}

配置属性。班

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

}

xx上下文。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中输入AARepo。xx。xx。服务。实施。yyImpl需要“com”类型的bean。xx。x、 存储库。找不到AARepo。

行动

考虑定义“com”类型的bean。xx。xx。存储库。您的配置中的AARepo`

共有3个答案

司徒茂实
2023-03-14
@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;
    }
}
柳玄裳
2023-03-14

Springboot似乎看不到您的Repo类。您可以尝试将以下内容添加到主应用程序类中:@EnableJpaRepositories(“com.xx.x.repository”)?!

---更新---

更新主应用程序中的完整配置。你能试试这个吗?!

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

希望这有帮助。

邓元白
2023-03-14

使用AppConfigClass顶部的EnableAutoConfiguration

 类似资料:
  • 从这份官方文件中,很难确定这两个模块之间有什么区别。 谁能提供一个官方和规范的答案来解释两者的区别吗?

  • 我们的Ops人员希望在应用程序启动时将Spring Boot配置(即所有属性)转储到日志文件中。我假设这可以通过使用annotation@ConfigurationProperties注入属性并打印它们来实现。 问题是是否有更好或内置的机制来实现这一目标。 考虑到似乎并没有一个内置的解决方案,除此之外,我还试着自己做饭。以下是我的想法: 这样做的挑战在于它不会打印application.yml中的

  • 我需要添加测试到我的Spring Boot项目。使用rails框架有开发和测试数据库,它们是在新项目启动时创建的。迁移应用于两个数据库以保持数据库模式相等。不幸的是,我没有找到关于如何在Spring Boot中配置测试环境数据库以及如何使数据库结构等于dev的留档。 在Spring Boot测试的最佳实践是什么?如何为测试环境设置和添加测试数据?有什么例子吗?

  • 我正在尝试为SSO配置Spring Boot和Keycloak。我已经创建了一个基本的AngularJS应用程序,它对Spring boot后端执行一些请求。使用此 Angular应用程序工作得很好,现在我正尝试在这里跟踪新的Spring Boot Keycloak apdater文档 这是我的keycloak.json,它在WEB-INF文件夹中。 以下是我的安全配置: 即使用户没有任何此角色,

  • 我有一个设置,我正在使用以下内容: Spring靴1.5。13使用Spring云版本Edgware。S3 我有Spring云配置服务器,我的Spring启动应用程序是它的客户端 每个应用程序都有一个引导程序。带有配置服务器uri和一些其他属性的yml 在码头工人群上运行集装箱 我目前正在通过一个自定义脚本将Swarm secrets传递给客户端,该脚本读取放入/run/secrets/中的文件,并

  • 我有一个旧的Spring启动应用程序(1.5.0-FINAL),我无法更改此版本。我想将redis添加到我的应用程序中,这就是我所做的: 1) 添加了maven dep: 2)将属性添加到我的引导 3) 添加了配置属性以检查是否启动连接: 上面的主机/端口不存在:我只想在启动时看到类似“连接错误”的东西,以确保我配置了所有内容,但没有显示任何内容!spring boot似乎没有尝试使用缓存。 我错