我正在使用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>
任何想法?提前致谢