1. 首先在application中配置数据源地址
my.datasource.koi.type=com.alibaba.druid.pool.DruidDataSource my.datasource.koi.url=jdbc:mysql://localhost:3306/?useUnicode=true&characterEncoding=utf-8&useSSL=true my.datasource.koi.username=root my.datasource.koi.password=123456 my.datasource.koi.driverClassName=com.mysql.jdbc.Driver
2. 在@Bean中 new DataSource的地址空间
@Configuration public class KOIDataSourceConfig { @Resource private DataSourceFactory dataSourceFactory; @Bean(name = "koiDataSource") @ConfigurationProperties(prefix = "my.datasource.koi") public DruidDataSource createDataSource() { return dataSourceFactory.create(); } // dataSourceFactory.create() : DruidDataSource dataSource = new DruidDataSource(); @Bean(name = "jdbcTemplate") public JdbcTemplate createSqlSessionTemplate(@Qualifier("koiDataSource") DruidDataSource druidDataSource) { return new JdbcTemplate(druidDataSource); } }
3. 在Service中直接使用即可
@Service public class KOISchedulerImpl implements KOIScheduler{ @Resource private JdbcTemplate jdbcTemplate; @Transactional @Override public void set_task_and_run(SQLPool pool, String config_path) { ExecuteSQL.prepare_and_execut_sql(pool, config_path); } @Transactional @Override public void startSchedulerTaskByDruid(String configPath) { jdbcTemplate.execute("INSERT INTO mydata.`test` (id) VALUE(1);"); } }
读取application中的配置信息:
1. 在application中配置 spring.sql.path = E://z 2. 定义一个Component类 @Component public class QualityRecode { @Value("${spring.sql.path}") private String sqlPath; public QualityRecode() {} public String getSqlPath() { return sqlPath; } public void setSqlPath(String sqlPath) { this.sqlPath = sqlPath; } } 3. 在Controller中实例化该类, 获取数据 @Resource private QualityRecode recode; recode.getSqlPath()
4. 使用Mapper读取 写入数据
1. 先在application配置数据源信息 2. 配置数据源config类 @Configuration @MapperScan(basePackages = "com.nio.mapper.dcs", sqlSessionTemplateRef = "dcsSqlSessionTemplate") public class DcsDataSourceConfig { @Resource private DataSourceFactory dataSourceFactory; @Bean(name = "dcsDataSource") @ConfigurationProperties(prefix = "my.datasource.dcs") public DruidDataSource createDataSource() { return dataSourceFactory.create(); } @Bean(name = "dcsSqlSessionFactory") public SqlSessionFactory createSqlSessionFactory(@Qualifier("dcsDataSource") DataSource dataSource) throws Exception { SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); bean.setDataSource(dataSource); bean.setMapperLocations( new PathMatchingResourcePatternResolver().getResources("classpath:mybatis/mapper/dcs/*.xml")); return bean.getObject(); } // @Bean(name = "cmsTransactionManager") // public DataSourceTransactionManager createTransactionManager(@Qualifier("cmsDataSource") DataSource dataSource) { // return new DataSourceTransactionManager(dataSource); // } @Bean(name = "dcsSqlSessionTemplate") public SqlSessionTemplate createSqlSessionTemplate(@Qualifier("dcsSqlSessionFactory") SqlSessionFactory sqlSessionFactory) { return new SqlSessionTemplate(sqlSessionFactory); } } 3. 创建实体类 接收表传来的数据 4. 编辑Mapper类, 创建查询-插入方法 public interface CmsMapper { List<PostEntity> getPostEntityList(); List<PostEntity> getLatestPostEntityList(@Param("yesterdayTimeStamp") Long yesterdayTimeStamp, @Param("currentTimeStamp") Long currentTimeStamp); void insertError(@Param("TaskLogRecordEntity") List<TaskLogRecord> taskLogRecords); } 5. 实现Mapper类 <select id="getPostEntityList" resultType="com.nio.entities.PostEntity"> SELECT up.account_id AS accountId, up.create_time AS updateTime, up.content, up.like_count AS likeCount, up.comment_count AS commentCount, lu.`name` AS nickName FROM lifestyle_prod.user_post up LEFT JOIN lifestyle_prod.livestream_user lu ON up.account_id = lu.user_id WHERE up.STATUS = 1 AND up.resource_type = 'user_post' AND lu.supplier = 'rongyun' AND up.create_time >= #{yesterdayTimeStamp} AND up.create_time <![CDATA[<=]]> #{currentTimeStamp} </select> <insert id="insertError"> insert into `task_log_record` ( id,task_type,execute_time,error_info ) values <foreach collection="TaskLogRecordEntity" item="error" separator=","> ( #{error.id}, #{error.task_type}, #{error.execute_time}, #{error.error_info} ) </foreach> </insert>
6. 需要注意的问题:
1. 当查询一个原表中不存在, 但需要写在中间实体的, 指标查询表时: 例如, MySQL 该表只有一个字段 id , 在计算之后, 生成 public class TestEntity { private long id2; private long id3; } Mapper应写成: <select id="getTest" resultType="com.nio.entities.TestEntity"> select t.id + 3 id2, t.id +1 id3 from (select 2 id from test) t </select> ## select 的值, 必须与实体类名一致, 而不是表中字段的名;