刷新ConfigurableApplicationContext后关闭entitymanagerfactory

时间:2017-04-05 05:02:24

标签: spring spring-mvc tomcat spring-security

我正在使用Spring MVC构建一个Web应用程序。我一直试图想出一种方法来定制一些系统属性并重新加载Web应用程序而无需重新启动Tomcat服务器。

目前,我正在使用ConfigurableApplicationContext中的refresh()方法执行此任务,此时它正在工作。

@Autowired
ConfigurableApplicationContext configurableApplicationContext;

...

public void reloadConfigurations() {
    configurableApplicationContext.refresh();
}

但是,如果用户在刷新系统后注销,那么之后他将无法再次登录系统。

以下是SPRING_SECURITY_LAST_EXCEPTION收到的消息:

  

entitymanagerfactory已关闭;嵌套异常是   java.lang.illegalstateexception:entitymanagerfactory已关闭。

在系统日志或tomcat日志中看不到任何其他错误。

这是代码

应用cotext.xml

<bean id="mysqlDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <property name="url" value="${jdbc.url}"/>
    <property name="username" value="${jdbc.username}"/>
    <property name="password" value="${jdbc.password}"/>
</bean>

<bean id="entityManagerFactory"
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" destroy-method="destroy">
    <property name="dataSource" ref="mysqlDataSource" />
    <property name="persistenceUnitName" value="myAppMySql" />
    <property name="packagesToScan" value="com.myApp.model" />
</bean>

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>

的persistence.xml

<persistence-unit name="myAppMySql" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
    <class>com.myApp.model.SystemConfig</class>
    <class>com.myApp.model.User</class>

    <properties>
        <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
        <property name="hibernate.hbm2ddl.auto" value="update"/>
        <property name="hibernate.show_sql" value="false"/>
        <property name="hibernate.connection.pool_size" value="5"/>
        <property name="hibernate.c3p0.min_size" value="5"/>
        <property name="hibernate.c3p0.max_size" value="10"/>
    </properties>
</persistence-unit>

任何想法?提前致谢

0 个答案:

没有答案