当前位置: 代码迷 >> .NET Framework >> Nano Framework之起用多数据源支持并添加多数据源事务处理
  详细解决方案

Nano Framework之起用多数据源支持并添加多数据源事务处理

热度:376   发布时间:2016-05-01 23:20:21.0
Nano Framework之启用多数据源支持并添加多数据源事务处理
本文基于前几篇文章为基础进行编写,需要了解前篇内容的浏览我的博客中的其他文章
今天的主题是使用Nano Framework开发多数据源及多数据源事务处理的示例

1、修改配置并添加新的数据源配置
1.1、修改context.properties
# 将属性mapper.package.jdbc=/examples-jdbc.properties修改为如下配置mapper.package.root=examples,examples2mapper.package.jdbc.examples=/examples-jdbc.propertiesmapper.package.jdbc.examples2=/examples2-jdbc.properties


1.2、添加examples2-jdbc.properties
JDBC.environment.id=examples2JDBC.pool.type=DRUIDJDBC.driver=org.h2.DriverJDBC.url=jdbc:h2:~/test2JDBC.username=testJDBC.password=testJDBC.autoCommit=false# 省略连接池的属性配置


2、新建数据库及表结构
2.1、启动服务并访问 http://ip:port/first-webapp/console,使用以下信息登录
  • URL: jdbc:h2:~/test2
  • 用户名: test
  • 密码: test


2.2、建表
create table t_nano_test (id int primary key,name varchar(255))


3、添加多数据源操作代码
3.1、修改JdbcExamplesDao及JdbcExamplesDaoImpl,添加delete方法
long delete(int id) throws SQLException;

private final String deleteById = "DELETE FROM T_NANO_TEST WHERE ID = ? ";@Overridepublic long delete(int id) throws SQLException {    return get(DataSource.EXAMPLES.value()).executeUpdate(deleteById, new ArrayList<Object>() {        private static final long serialVersionUID = 1L; {         add(id);     }});}


3.2、增加JdbcExamplesMoveDao及JdbcExamplesMoveDaoImpl
@ImplementedBy(JdbcExamplesMoveDaoImpl.class)public interface JdbcExamplesMoveDao {     long insert(Test test) throws SQLException;}

public class JdbcExamplesMoveDaoImpl implements JdbcExamplesMoveDao {    private final String insert = "INSERT INTO T_NANO_TEST(ID, NAME) VALUES (?, ?) ";    @Override    public long insert(Test test) throws SQLException {        List<Object> values = new ArrayList<>();        values.add(test.getId());        values.add(test.getName());        return get(DataSource.EXAMPLES2).executeUpdate(insert, values);    }}


3.3、添加Component实现,修改JdbcExamplesComponent及JdbcExamplesComponentImpl
@RequestMapping("/persist/move/{id}")Object move(@PathVariable("id") Integer id);

@Injectprivate JdbcExamplesMoveDao examplesMoveDao;@JdbcTransactional(envId = {DataSource.EXAMPLES, DataSource.EXAMPLES2})@Overridepublic Object move(Integer id) {    try {        Test test = examplsDao.select(id);        if(test == null) {            return ResultMap.create(200, "Not Found Data", "WARNING");        } else {            if(examplesMoveDao.insert(test) > 0) {                examplsDao.delete(id);            }        }    } catch(Exception e) {        throw new ComponentInvokeException(e.getMessage(), e);    }    return ResultMap.create(200, "OK", "SUCCESS");}


4、启动服务后进行以下操作
  • http://ip:port/first-webapp/jdbc/persist/move/1
  • http://ip:port/first-webapp/console并登陆test2库查询迁移数据


5、至此,多数据源及多数据源事务的示例就开发完了

  相关解决方案