如何在Spring启动应用程序中按需加载bean

时间:2017-11-20 10:29:29

标签: spring hibernate spring-boot

>

嗨,我是Spring和Hibernate的新手,需要积极的回应。根据我的项目要求,我有一个spring启动应用程序,并希望在从用户获取值时按需加载Hibernate Configuration,如数据源bean,会话工厂bean。根据用户数据库规范值,它将在那里创建连接并创建表并执行更多任务。这是我的示例代码,其中我在初始运行时排除了db配置,之后调用hibernate configure方法时它创建了单独的上下文和与db的连接。问题是它无法在db中保存用户值而无法在应用程序中自动装配会话工厂对象

主要申请

@SpringBootApplication

@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class})

public class TestApplication extends  WebMvcConfigurerAdapter {

    public static void main(String[] args) {

        SpringApplication.run(TestApplication.class, args);
    }

}

Hibernate Persistence.XMl这是我想要按需加载的四个bean

<bean id="dataSource"
    class="org.apache.commons.dbcp.BasicDataSource"
        p:driverClassName="${spring.datasource.driver-class-name}" p:url="${spring.datasource.url}"
        p:username="${spring.datasource.username}"
        p:password="${spring.datasource.password}"
        p:initialSize="1" p:maxActive="2"
        destroy-method="close">
    </bean>




    <bean id="sessionFactory"
        class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"


         p:dataSource-ref="dataSource">
        <property name="hibernateProperties">
            <value>
                hibernate.dialect=${spring.jpa.properties.hibernate.dialect}
                hibernate.format_sql=true
                hibernate.show_sql=false
                hibernate.hbm2ddl.auto=update
            </value>
        </property>
        <property name="mappingResources">
            <list>

                <value>entity-schema-hbm.xml</value>

            </list>

                </property>
    </bean>

    <bean id="testDao" class="com.app.dao.AbstractGenericDao" abstract="true">
        <property name="entityManager">
            <bean class="org.springframework.orm.jpa.support.SharedEntityManagerBean">
                <property name="persistenceUnitName" value="persistence-test-unit" />
            </bean>
        </property>
    </bean>



    <bean id="transactionManager"
          class="org.springframework.orm.hibernate5.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>


    <tx:annotation-driven  />

用于初始化bean的util中定义的方法,它能够创建与db的单独上下文和连接,但不与当前应用程序合并并与db通信。我想稍后创建连接,并且可用于spring boot应用程序

public  static EntityManager configureHibernate() {
        ClassPathXmlApplicationContext appContext = new ClassPathXmlApplicationContext(
                "hibernate-persistence.xml");
         dataSource = (DataSource) appContext.getBean("dataSource");
        sessionFactory = (SessionFactory) appContext.getBean("sessionFactory");
         transactionManager = (TransactionManager) appContext.getBean("transactionManager");

         entityManager = (EntityManager) appContext.getBean("testDao");


        UserEntity userEntity=new UserEntity("admin","secret","admin@gmail.com");
        sessionFactory.getCurrentSession().saveOrUpdate(userEntity);
        try{
            transactionManager.commit();
        }catch (Exception e){

        }


        return entityManager;
    }

0 个答案:

没有答案