В моем приложении мы используем несколько источников данных, поэтому у нас есть несколько конфигураций баз данных (сеансовые заводы). Все отлично работает на нашем локальном (whindows машине), но при развертывании войны файл приложения Unix Сбой за исключением следующего:Странная пружина «неразрешимая круговая справочная проблема»
org.springframework.beans.factory.BeanCreationException: Ошибка создании компонента с именем «cpnRepository» : Завершение автозапуска ; вложенное исключение - org.springframework.beans.factory.BeanCreationException: не может поле autowire: private org.hibernate.SessionFactory org.npcc.ccms.dao.GenericDB1Dao.sessionFactory; вложенное исключение - org.springframework.beans.factory.BeanCreationException: ошибка создание bean-компонента с именем «DB1Config»: в результате отказа от автоспуска ; вложенное исключение - org.springframework.beans.factory.BeanCreationException: не может поле autowire: private org.hibernate.SessionFactory org.npcc.ccms.config.db.DB1Config.sessionFactory; вложенное исключение - org.springframework.beans.factory.BeanCurrentlyInCreationException: Ошибка при создании компонента с именем «DB1SessionFactory»: запрошенный bean is в настоящее время находится в создании: существует ли неразрешимая циркулярная ссылка?
Вот реализация дао:
@Repository("cpnRepository")
public class ProgramNodeDaoImpl extends GenericDB1Dao<Integer, CustomProgramNode> implements CPNRepositoryDao {
@Override
public List<CustomProgramNode> findAllNodes() {
Criteria criteria = createEntityCriteria();
return (List<CustomProgramNode>) criteria.list();
}
@Override
public List<CustomProgramNode> findByStatus(String status) {
Query query = getSession().createQuery("from CustomProgramNode where status = :status");
query.setParameter("status", status);
List<CustomProgramNode> list = query.list();
return list;
}
}
Generic DAO из DB1:
public abstract class GenericDB1Dao<PK extends Serializable, T> {
private final Class<T> persistentClass;
@SuppressWarnings("unchecked")
public GenericAgrgtrDao(){
this.persistentClass =(Class<T>) ((ParameterizedType) this.getClass().getGenericSuperclass()).getActualTypeArguments()[1];
}
@Autowired
@Qualifier("DB1SessionFactory")
private SessionFactory sessionFactory;
protected Session getSession(){
return sessionFactory.getCurrentSession();
}
@SuppressWarnings("unchecked")
public T getByKey(PK key) {
return (T) getSession().get(persistentClass, key);
}
public void persist(T entity) {
getSession().persist(entity);
}
public void delete(T entity) {
getSession().delete(entity);
}
protected Criteria createEntityCriteria(){
return getSession().createCriteria(persistentClass);
}
}
Конфигурация Database1:
@Configuration
public class DB1Config {
final static Logger logger = LogManager.getLogger(DB1Config.class);
@Autowired
private Environment environment;
@Autowired
@Qualifier("DB1SessionFactory")
private SessionFactory sessionFactory;
@Bean(name="DB1SessionFactory")
public LocalSessionFactoryBean db1SessionFactory() {
LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
sessionFactory.setDataSource(dataSource());
sessionFactory.setPackagesToScan(new String[] { "org.npcc.ccms.model.db1" });
sessionFactory.setHibernateProperties(hibernateProperties());
return sessionFactory;
}
@Bean(destroyMethod="")
public DataSource dataSource() {
JndiTemplate jndi = new JndiTemplate();
DataSource dataSource = null;
try {
dataSource = (DataSource) jndi.lookup(environment.getRequiredProperty("datasource.db1"));
} catch (NamingException e) {
}
return dataSource;
}
private Properties hibernateProperties() {
Properties properties = new Properties();
properties.put("hibernate.dialect", environment.getRequiredProperty("hibernate.dialect"));
properties.put("hibernate.show_sql", environment.getRequiredProperty("hibernate.show_sql"));
properties.put("hibernate.format_sql", environment.getRequiredProperty("hibernate.format_sql"));
return properties;
}
@Primary
@Bean(name="DB1TransactionManager")
public HibernateTransactionManager db1TransactionManager() {
HibernateTransactionManager txManager = new HibernateTransactionManager();
txManager.setSessionFactory(this.sessionFactory);
txManager.setDataSource(dataSource());
return txManager;
}
}
Каким образом зависимостей Spring решительность фасоли? Почему порядок между двумя OS-es не соответствует порядку? Заранее спасибо.
Ваш журнал ошибок не имеет большого смысла. Пожалуйста, опубликуйте ** полную ** трассировку стека. –
Вместо вызова метода источника данных, почему вы не используете компонент? –