我正在开发一个由多个小项目组成的Spring Boot项目。他们都共享一个由辅助类等组成的共同项目。在这个常见项目中,我尝试创建一个Service
,Repository
,Entity
和一个Controller
,可以在所有其他项目中共享和选择性地启用它们(使用持久数据调试端点,每个项目都有一个单独的数据库)。
我认为理想的解决方案是创建一个配置bean,应该定义该配置bean以便启用这些功能或类似的东西。
目前我有这个设置。共同实体:
@MappedSuperclass
public class SomeEntity {
@Id
@GeneratedValue
protected Long id;
@Column(unique = true)
protected String name;
public SomeEntity() {
}
public Long getId() {
return id;
}
public String getName() {
return name;
}
}
定义常用方法的服务:
public abstract class SomeEntityService<T extends SomeEntity> {
private final SomeRepository<T> someRepository;
public SomeEntityService(SomeRepository<T> someRepository) {
this.someRepository = someRepository;
}
public T getSomeEntity(String name) {
return someRepository.findByName(name);
}
public List<T> getSomeEntities() {
return someRepository.findAll();
}
public abstract void init();
}
通用控制器:
@RestController
@RequestMapping(value = "/entities")
@ConditionalOnBean(value = SomeEntityService.class)
public class SomeController<T extends SomeEntity> {
private final SomeEntityService<T> someEntityService;
@Autowired
public SomeController(SomeEntityService<T> someEntityService) {
this.someEntityService = someEntityService;
}
@RequestMapping(method = RequestMethod.GET)
public List<T> getSomeEntities() {
return someEntityService.getSomeEntities();
}
@RequestMapping(value = "/{name}", method = RequestMethod.GET)
public T getSomeEntity(@PathVariable String name) {
return someEntityService.getSomeEntity(name);
}
}
公共存储库:
@NoRepositoryBean
public interface SomeRepository<T extends SomeEntity> extends JpaRepository<T, Long>, JpaSpecificationExecutor<T> {
T findByName(String name);
}
可以找到完整的项目here。
现在在这个例子中,如果我实现SomeService
,SomeEntity
和SomeRepository
,则会创建控制器bean(注意控制器上的@ConditionalOnBean
注释)并且一切正常精细。但是我不想重新定义实体和存储库,因为所有需要的实现已经存在,但是我找不到任何关于如何根据某些条件禁用这些bean的创建的文档。所以问题是:
@Entity
注释类的创建?@Repository
带注释的类做同样的事情?修改
更具体的问题是 - 如何根据某些条件从扫描中排除所选实体,是否可以在春季执行此操作?
例如,创建一组实体只是创建了一些特定的bean或定义了application.properties文件中的某些属性。
答案 0 :(得分:0)
如何使用@ConditionalOnProperty
并通过属性文件进行配置?
This文章有以下说法:
在Spring Boot中,您可以使用@ConditionalOnProperty批注根据属性的存在启用或禁用特定bean。如果要为微服务提供可选功能,这非常有用。