我有一个包含许多道的项目,每个都由@Repository注释。
还有几个Spring Boot项目,每个项目都有其Spring上下文,可以独立运行,并且它们有对包含Daos的项目的引用。
问题是,我不想在每个项目中将所有的道加载到Spring上下文中。每个Spring启动项目只需要一些指定的道。
我曾经通过在每个项目的XML配置中将Dao类定义为bean来指定Dao类。
现在,我们将转向基于java和注释的配置。
有没有一种方法可以告诉Spring上下文只加载我指定的@Repository?
我知道我可以创建@Configuration类并定义@Bean方法,但我仍然需要将它们视为@Repository,而不是普通的Bean。是否支持这一点,以及如何实现这一点?
将SpringBootApplication、EnableAutoConfiguration、SpringBootConfiguration和ComponentScan三者结合起来即可。
@ComponentScan
是导致扫描包下的所有@Repository
bean自动注册的人,这是您不希望发生的事情。
因此,您可以单独使用这些注释,但不包括@ComponentScan
。并使用@导入
显式定义要注册的bean。
主要应用程序类如下所示:
@SpringBootConfiguration
@EnableAutoConfiguration
@Import(value = {FooRepoistory.class, BarRepository.class,.......})
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
从您的问题中,我假设您希望在其他几个Spring项目中重用具有多个存储库和JPA Entity对象的Spring DAO项目,这些对象可能属于不同的数据源。您更喜欢只加载一组特定的JPA实体/存储库。第一步是将相关实体和存储库组织到不同的包中,并将此项目包含在其他项目的路径中。
假设您已将存储库和实体分离到不同的包中,这是处理此问题的一种方法。创建您自己的配置bean,该bean将用它所需的特定包和数据源实例化JPA EntityManagerFactorybean。在下面的代码中,下面的EntityManagerFactory将从MODEL\u包加载实体,并从repositories\u包加载存储库。
@Configuration
@ComponentScan(basePackages = MODEL_PACKAGE)
@EnableJpaRepositories(basePackages = REPOSITORIES_PACKAGE,
entityManagerFactoryRef = "ENTITY_MANAGER_FACTORY")
@EnableTransactionManagement
public class PersistenceConfig {
public static final String MODEL_PACKAGE = "Your model package";
public static final String REPOSITORIES_PACKAGE = "Your repository package";
public static final String ENTITY_MANAGER_FACTORY = "entity_manager_factory";
public static final String TRANSACTION_MANAGER = "transaction_manager";
@Autowired //This is to get your property file entries (DB connection, etc).
private Environment environment;
@Bean(DATA_SOURCE)
public DataSource dataSource() {
//Create your datasource from environment properties. Example - org.apache.tomcat.jdbc.pool.DataSource
}
@Bean(ENTITY_MANAGER_FACTORY) @Autowired
public LocalContainerEntityManagerFactoryBean entityManagerFactory(
@Qualifier(DATA_SOURCE) DataSource dataSource) throws IllegalStateException {
LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean();
entityManagerFactoryBean.setDataSource(dataSource);
Properties jpaProperties = new Properties();
// set properties for your JPA, for example, hibernate.dialect, hibernate.format_sql, etc.
entityManagerFactoryBean.setJpaProperties(jpaProperties);
entityManagerFactoryBean.setJpaVendorAdapter(new HibernateJpaVendorAdapter());
entityManagerFactoryBean.setPackagesToScan(MODEL_PACKAGE);
}
@Bean(TRANSACTION_MANAGER) @Autowired
@Primary
@Qualifier(value = "transactionManager")
public JpaTransactionManager transactionManager(
@Qualifier(ENTITY_MANAGER_FACTORY) EntityManagerFactory entityManagerFactory) {
JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setEntityManagerFactory(entityManagerFactory);
return transactionManager;
您可以在这些DAO类中的每一个上使用@Con合条件
。只有当使用@Con合条件
注释提到的条件得到满足时,类才会在上下文中加载。您可以具有以下条件:
@ConditionalOnProperty(
value="module.name",
havingValue = "module1",
matchIfMissing = false)
class DaoForModule1 {
当且仅当属性模块时,这将加载daommodule1。名称
具有值模块1。如果要在未设置属性时加载此DAOMULET1,可以将matchIfMissing更改为true。
您还可以使用Profile注释来限制基于Profile加载的类
@Profile("module2")
class DaoForModule2 {
只有在活动概要文件列表中有模块2时,才会加载DaoForModule2。但是我不喜欢概要文件,因为概要文件的用例是不同的。我们通常使用概要文件来指定基于环境的可变资源。
我有数据保存在员工的Spring和“个人发展计划”中。可以说,员工是主导阶层。它看起来像这样: 个人发展计划如下: 在数据库中,它被存储为来自
我有一个EAR文件,其中包含两个不同的jar,它们共享一些具有相同package.class名称的类。这些JAR部署在我的APP-INF/lib目录中。 假设A jar包含最新版本的类,B包含旧版本的类。当引用一个类时,Weblogic首先查看B jar并加载破坏某些功能的旧版本。 如何让Weblogic从APP-INF/lib中先加载jar A再加载B?我需要定义一个特定的顺序,以避免加载旧类。
当我尝试打开下面的URL时,我确实看到了我的JSON响应。 http://localhost:8080/v3/api-docs
如何才能实现这个功能?最好配合路由勾子实现,不然应该会在一个页面加载后,其他页面不点击刷新应该会一直保留加载的js
问题内容: 如果名称和名称相同,默认情况下MapStruct将映射源和目标的所有属性。尽管我们可以在@Mapping中使用ignore属性来省略任何字段映射。但这不是我想要的。我想控制映射策略。我必须指定类似 现在此映射仅用于将ID和名称从源映射到目标。除非在映射注释中指定,否则不应映射其他字段。 问题答案: 您正在寻找的是#1392中 的功能请求。有一个待定的PR,因此可以在下一版本(1.3.0
我正在使用Spring数据为我的应用程序获取数据。 repository类使用mongo实体类,该实体类作为上游依赖项添加到我的项目中,这意味着我无法控制更改该类的源代码。因此,我无法使用组织中的文档注释。springframework。数据mongodb。果心映射到我的mongo实体类。 在这里,我对Dummy类的源代码没有任何控制权,因此我无法添加文档来指定该类的集合名称 如何在使用查询mon