您的位置:首页 > 其它

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

2015-10-19 17:21 357 查看
本文基于前几篇文章为基础进行编写,需要了解前篇内容的浏览我的博客中的其他文章
今天的主题是使用Nano Framework开发多数据源及多数据源事务处理的示例

[size=large]1、修改配置并添加新的数据源配置[/size]
[size=medium]1.1、修改context.properties[/size]

# 将属性mapper.package.jdbc=/examples-jdbc.properties修改为如下配置
mapper.package.root=examples,examples2
mapper.package.jdbc.examples=/examples-jdbc.properties
mapper.package.jdbc.examples2=/examples2-jdbc.properties


[size=medium]1.2、添加examples2-jdbc.properties[/size]

JDBC.environment.id=examples2

JDBC.pool.type=DRUID
JDBC.driver=org.h2.Driver
JDBC.url=jdbc:h2:~/test2
JDBC.username=test
JDBC.password=test
JDBC.autoCommit=false

# 省略连接池的属性配置


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

[size=medium]2.2、建表[/size]

create table t_nano_test (
id int primary key,
name varchar(255)
)


[size=large]3、添加多数据源操作代码[/size]
[size=medium]3.1、修改JdbcExamplesDao及JdbcExamplesDaoImpl,添加delete方法[/size]

long delete(int id) throws SQLException;


private final String deleteById = "DELETE FROM T_NANO_TEST WHERE ID = ? ";

@Override
public long delete(int id) throws SQLException {
return get(DataSource.EXAMPLES.value()).executeUpdate(deleteById, new ArrayList<Object>() {
private static final long serialVersionUID = 1L; {
add(id);
}});
}


[size=medium]3.2、增加JdbcExamplesMoveDao及JdbcExamplesMoveDaoImpl[/size]

@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);
}
}


[size=medium]3.3、添加Component实现,修改JdbcExamplesComponent及JdbcExamplesComponentImpl[/size]

@RequestMapping("/persist/move/{id}")
Object move(@PathVariable("id") Integer id);


@Inject
private JdbcExamplesMoveDao examplesMoveDao;

@JdbcTransactional(envId = {DataSource.EXAMPLES, DataSource.EXAMPLES2})
@Override
public 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");
}


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

[size=large]5、至此,多数据源及多数据源事务的示例就开发完了[/size]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐