我花了一天的时间想弄清楚,最后不得不求助于stackoverflow寻求专家的建议。
我正在使用java设置spring配置,使其具有两个datasources和两个LocalContainerEntityManagerFactoryBean,如下所示。但Spring默认情况下似乎会寻找entityManagerFactory()和抛出异常(下面包含stacktrace)。我如何配置spring来使用我的entitymanagerfactories而不是默认名称。
@Bean(name="visionDataSource")
public DataSource visionDataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
// set properties..
return dataSource;
}
@Bean(name="stormDataSource")
public DataSource visionDataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
// set properties..
return dataSource;
}
@Bean(name="visionentityManagerFactory")
public LocalContainerEntityManagerFactoryBean visionentityManagerFactory() {
LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean();
entityManagerFactoryBean.setDataSource(visionDataSource());
//entityManagerFactoryBean.setPersistenceUnitManager(persistenceUnitManager());
//entityManagerFactoryBean.setPersistenceXmlLocation(null);
entityManagerFactoryBean.setPersistenceUnitName("visionEntityManagerFactory");
entityManagerFactoryBean.setPersistenceProviderClass(HibernatePersistence.class);
entityManagerFactoryBean.setPackagesToScan(env.getRequiredProperty(PROPERTY_NAME_ENTITYMANAGER_PACKAGES_TO_SCAN));
entityManagerFactoryBean.setJpaProperties(hibProperties());
entityManagerFactoryBean.afterPropertiesSet();
System.out.println("*********************visionEntityManagerFactory********************");
return entityManagerFactoryBean;
}
@Bean(name="stormEntityManagerFactory")
public LocalContainerEntityManagerFactoryBean stormEntityManagerFactory() {
entityManagerFactoryBean.setDataSource(stormDataSource());
// set other properties
return entityManagerFactoryBean;
}
错误日志:
原因:org.springframework.beans.factory.nosuchbeandefinition异常:在org.springframework.beans.factory.support.defaultlistablebeanfactory.getbeandefinition(defaultlistablebeanfactory.java:549)在org.springframework.beans.factory.support.abstractbeanfactory.getmergedlocalbeandefinition(abstractbeanfactory.1095)在
更新:我正在使用JPARepository
public interface ContactRepository extends JpaRepository<Contact, Serializable> {
List<Contact> findByCompanyId(int companyId);
}
我已经尝试扩展一个自定义存储库,注入entitymanager,如下所示。但这也无济于事。
public interface ContactRepository extends DefaultRepository<Contact, Serializable> {
List<Contact> findByCompanyId(int companyId);
}
@NoRepositoryBean
public class DefaultRepositoryImpl<T, ID extends Serializable> extends SmpleJpaRepository<T, ID> implements
DefaultRepository<T,ID> {
@PersistenceContext(unitName="visionEntityManagerFactory")
private EntityManager entityManager;
/**
* @param domainClass
* @param em
*/
public DefaultRepositoryImpl(Class<T> domainClass, EntityManager em) {
super(domainClass, em);
}
/**
* {@inheritDoc}
*/
protected Object getTargetRepository(RepositoryMetadata metadata) {
return new DefaultRepositoryImpl<T, ID>((Class<T>) metadata.getDomainType(), entityManager);
}
/**
* {@inheritDoc}
*/
protected Class<?> getRepositoryBaseClass(RepositoryMetadata metadata) {
return DefaultRepository.class;
}
}
一个可能的解决方案。
public class MyRepositoryImpl extends JdbcDaoSupport implements MyRepository {
@Qualifier("odsDataSource")
@Autowired(required = true)
private DataSource ds;
public MyRepositoryImpl() {
}
@PostConstruct
void postConstruct() {
setDataSource(ds);
}
...
}
如果您通过扩展JdbcDaoSupport(以及其他一些Spring提供的帮助程序)来开发存储库,那么它们将默认尝试在默认的“EntityManagerFactory”上按名称连接。因此您需要通过注入另一种名称的数据bean来初始化它们。
另一种可能性是假设您使用的是JPA。
@Repository
public class MyRepositoryImpl implements MyRepository {
@PersistenceContext(unitName="MyPersistenceUnit")
private EntityManager entityManager;
public List<MyModel> findAll() {
return entityManager.createNamedQuery("MyModel.findAll").getResultList();
}
}
我从以下链接下载了示例代码:https://spring.io/guides/gs/accessing-data-mysql/我更改了应用程序。属性文件如下: 之后,我转到源文件夹并运行以下命令:mvn clean spring boot:run发生此错误: 请帮我解决这个问题
角色JAVA 任务JAVA 使用者JAVA RoleRepository.java TaskRepository。JAVA 用户库 登录注册应用程序。JAVA application.properties http://maven.apache.org/xsd/maven-4.0.0.xsd" 波姆。xml [错误]测试运行:1,失败:0,错误:1,跳过:0,耗时:2.941秒
尝试启动Spring Boot应用程序时,我收到以下错误: 注意:仅当我将自动连线注释置于IDeviceRepository IDeviceRepository上方时,才会发生此错误 。java类 我还没有让持久化到数据库-但是正在创建实体 这是项目的目录结构: com。美国广播公司。初始化。应用JAVA com.abc.controller.ontroller.java com。美国广播公司。服
当它在. xml文件中定义时,一切都很好。现在我已经开始将. xml文件迁移到java配置。Security.xml是我迁移的第一个文件。 安全xml 已迁移SecurityConfig。JAVA 稍后我将配置,因为我需要首先使当前配置正常工作。运行程序后,我得到以下错误。 每当提供的出现问题时,就会发生此错误。我尝试使用其他一些步骤配置AuthenticationProvided,但都不起作用。
我正在Spring中开发一个应用程序,使用Tomcat、Mysql5、Java8。。。问题是,由于“required bean‘entityManagerFactory’not found”问题,我无法部署它。我与同事一起开发了这个项目,但他们可以完美地部署它,即使我在Spring工具套件中复制粘贴相同的项目。怎么可能呢?错误: 这是我的pom.xml 这是我的存储库 这是我的控制器 应用属性 实
尝试运行我的Spring启动应用程序,我的编译器说;“_worldcom.example.hello字段回购。UserService需要一个名为entityManagerFactory的bean,但找不到。 注入点有以下注释:-@org.springframework.beans.factory.annotation.自动生成(必需=true)" Spring启动的新手,所以我不太确定为什么我的项