Spring - 来自 XML 的 Mybatis 重新加载片段
Spring - Mybatis reload fragment from XML
我有一个 WebApp 使用 JRebel (7)
和 Spring-Mybatis (1.3.1)
当我在 XML mapper
文件中更改 sql
statement
而 AppServer (Tomcat 8)
是 运行 时,更新后的 SQL
是否被框架执行。
<select ... >
如果我在 XML
文件中更改 sql
fragment
,更改 不会 反映在执行的查询中,直到我重新启动应用程序服务器。
<sql ... >
有没有办法通过配置或 Java
调用从文件重新加载 Sql
fragment
?
我找到了一种方法...
在我的 AppConfig 中,我将提供 SqlSessionFactory 的 bean 的范围限定为 prototype
范围 - 然后它在每个请求上重新创建 bean,并且缓存被破坏。这当然是非常低效的;但在您处理 SQL 片段时,它在 Developer PC 上是一个很好的解决方法:
@Bean
@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public SqlSessionFactory sqlSessionFactory() throws Exception {
...
}
HotswapAgent 现在有一个新的 MyBatis 插件https://github.com/HotswapProjects/HotswapAgent,它可以处理 MyBatis 配置重新加载。
我有一个 WebApp 使用 JRebel (7)
和 Spring-Mybatis (1.3.1)
当我在 XML mapper
文件中更改 sql
statement
而 AppServer (Tomcat 8)
是 运行 时,更新后的 SQL
是否被框架执行。
<select ... >
如果我在 XML
文件中更改 sql
fragment
,更改 不会 反映在执行的查询中,直到我重新启动应用程序服务器。
<sql ... >
有没有办法通过配置或 Java
调用从文件重新加载 Sql
fragment
?
我找到了一种方法...
在我的 AppConfig 中,我将提供 SqlSessionFactory 的 bean 的范围限定为 prototype
范围 - 然后它在每个请求上重新创建 bean,并且缓存被破坏。这当然是非常低效的;但在您处理 SQL 片段时,它在 Developer PC 上是一个很好的解决方法:
@Bean
@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public SqlSessionFactory sqlSessionFactory() throws Exception {
...
}
HotswapAgent 现在有一个新的 MyBatis 插件https://github.com/HotswapProjects/HotswapAgent,它可以处理 MyBatis 配置重新加载。