storm jdbc
添加依赖
<dependency>
<groupId>org.apache.storm</groupId>
<artifactId>storm-jdbc</artifactId>
<version>${storm.version}</version>
</dependency>
JdbcInsertBolt执行插入
一、SimpleJdbcMapper( implenments JdbcMapper) 用于insert到数据库,将tuples转换成DB row
JdbcMapper simpleJdbcMapper = new SimpleJdbcMapper(TABLE_NAME, connectionProvider);
使用getColumns()可以查看具体的映射关系,等于JDBC中connection.getMetaData().getColumns();
二、开始insert
JdbcInsertBolt userPersistanceBolt = new JdbcInsertBolt(connectionProvider, simpleJdbcMapper)
.withTableName("user")
.withQueryTimeoutSecs(30);
Or
JdbcInsertBolt userPersistanceBolt = new JdbcInsertBolt(connectionProvider, simpleJdbcMapper)
.withInsertQuery("insert into user values (?,?)")
.withQueryTimeoutSecs(30);
可以指定最大时间 ,默认是topology.message.timeout.secs
三、如果要insert的只有部分列,可以使用columnschema
例如,创建表
create table if not exists user_details (user_id integer, user_name varchar(100), dept_name varchar(100), create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP);
时间戳列有默认值,插入时不需要指定
可以这样
List<Column> columnSchema = Lists.newArrayList(
new Column("user_id", java.sql.Types.INTEGER),
new Column("user_name", java.sql.Types.VARCHAR),
new Column("dept_name", java.sql.Types.VARCHAR));
JdbcMapper simpleJdbcMapper = new SimpleJdbcMapper(columnSchema);
JdbcTridentState执行插入
JdbcTridentState
JdbcState.Options options = new JdbcState.Options()
.withConnectionProvider(connectionProvider)
.withMapper(jdbcMapper)
.withTableName("user_details")
.withQueryTimeoutSecs(30);
JdbcStateFactory jdbcStateFactory = new JdbcStateFactory(options);
同JdbcInsertBolt ,也可以用withInsertQuery 替代withTableName