jfinal整合spring ioc、註解事務

代碼地址 1. 整合ioc ioc整合很簡單。根據jfinal手冊操做便可。java

2. 整合事務管理器 個人實現方式是這樣的: 用spring管理鏈接池,而不用jfnal的鏈接池插件。而後實現一個IDataSourceProvider,套給jfianl的activerecord。mysql

配置插件:git

<!-- lang: java -->
/**
 * 配置插件
 */
public void configPlugin(Plugins me) {
	
	SpringPlugin spring = new SpringPlugin();
	me.add(spring);
	
	SpringDataSourceProvider prov = new SpringDataSourceProvider();
	
	// 配置ActiveRecord插件
	ActiveRecordPlugin arp = new ActiveRecordPlugin(prov);
	me.add(arp);
	arp.addMapping("blog", Blog.class);	// 映射blog 表到 Blog模型
}

SpringDataSourceProvider : <!-- lang: java --> public class SpringDataSourceProvider implements IDataSourceProvider {spring

private ApplicationContext ctx;

private static final String proxyDsName = "proxyDataSource";

private String beanName;

public SpringDataSourceProvider(String beanName){
	this.beanName = beanName;
}

public SpringDataSourceProvider(){
	this.beanName = proxyDsName;
}

@Override
public DataSource getDataSource() {
	if(IocInterceptor.ctx==null){
		IocInterceptor.ctx = new FileSystemXmlApplicationContext(PathKit.getWebRootPath() + "/WEB-INF/applicationContext.xml");
	}
	ctx = IocInterceptor.ctx;
	DataSource ds = null;
	ds = (DataSource)ctx.getBean(beanName,TransactionAwareDataSourceProxy.class);
	return ds;
}

須要特別注意的是在applicationContext.xml中要配置一個代理的datasource來進行spring的事務管理:sql

<!-- lang: xml -->
<!-- datasource 數據源 -->
<bean id="targetDataSource" name="targetDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">  
   	<!-- 指定鏈接數據庫的驅動-->  
    <property name="driverClass" value="com.mysql.jdbc.Driver"/>  
    <!-- 指定鏈接數據庫的URL-->  
    <property name="jdbcUrl" value="jdbc:mysql://127.0.0.1/jfinal_demo?characterEncoding=utf8&amp;zeroDateTimeBehavior=convertToNull"/>  
    <!-- 指定鏈接數據庫的用戶名-->  
    <property name="user" value="root"/>  
    <!-- 指定鏈接數據庫的密碼-->  
    <property name="password" value=""/> 
</bean>
 
<bean id="proxyDataSource" class="org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy">
    <constructor-arg>
        <ref bean="targetDataSource" />
    </constructor-arg>
</bean>
 
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="proxyDataSource" />
</bean>
 
<tx:annotation-driven transaction-manager="transactionManager"/>

具體項目地址數據庫

注: jfinal對spring的支持並非很好,每次請求都會經過iocInterceptor反射controller ,每次getBean在設置值。。 仍是不建議用jfnal+spring的形式。用純spring或者純jfinal更好。app

相關文章
相關標籤/搜索