本文共 2970 字,大约阅读时间需要 9 分钟。
笔者最近因为一些需求给项目中添加了odps数据源,在尝试使用的期间碰到了一些问题,在此记录一下
odps的官方文档推荐了两种使用方式,第一种是通过sdk的jar包,第二种是使用odps-jdbc的jar包(),笔者由于需要集成odps和druid,所以选用了第二种方式,下面是主要依赖:
org.apache.commons commons-codec 1.8 com.aliyun.odps odps-jdbc 3.0.1 jar-with-dependencies
再结合笔者之前写的文章《》,将odps数据源配置写入属性配置文件和数据源配置文件中,如下方伪代码:
属性配置文件:
@Data@ConfigurationProperties(prefix = "spring.datasource")public class DataSourceConfigProperties { private DataSourceProperties muyichen; private DataSourceProperties test; private DataSourceProperties odps; @Data public static class DataSourceProperties { private String driverClassName; private String url; private String username; private String password; }}
数据源配置文件:
/** * 多数据源配置 * * @Author muyichen * @Date 2021年6月16日 */@Configuration@EnableConfigurationProperties(DataSourceConfigProperties.class)@MapperScan(basePackages = { "com.odps.dao"}, sqlSessionFactoryRef = "odpsSqlSessionFactory")public class DataSourceConfig { @Bean(name = "odpsDataSource") public DruidDataSource getOdpsDataSource(DataSourceConfigProperties properties) { DruidDataSource dataSource = new DruidDataSource(); dataSource.setDriverClassName(properties.getOdps().getDriverClassName()); dataSource.setUrl(properties.getOdps().getUrl()); dataSource.setUsername(properties.getOdps().getUsername()); dataSource.setPassword(properties.getOdps().getPassword()); return dataSource; } @Bean(name = "odpsSqlSessionFactory") public SqlSessionFactory odpsSqlSessionFactory(@Qualifier("odpsDataSource") DataSource dataSource) throws Exception { SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); bean.setDataSource(dataSource); bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:odps/*.xml")); return bean.getObject(); } }
上图的com.odps.dao是持久层的扫包路径,odpsSqlSessionFactory方法中的classpath:odps/*.xml是持久层对应的xml文件扫包路径
application.properties配置文件中对应的odps属性配置:
#project的值对应的是odps项目名称spring.datasource.odps.url=jdbc:odps:http://service.cn-hangzhou.maxcompute.aliyun.com/api?project=test_projectspring.datasource.odps.driver-class-name=com.aliyun.odps.jdbc.OdpsDriver#username对应创建项目空间的AccessKey IDspring.datasource.odps.username=#password对应创建项目空间的AccessKey ID对应的AccessKey Secretspring.datasource.odps.password=
完成上面这些配置,并且加上对应的dao、xml之后,就可以实现简单的odps的使用了(当然你要有对应的项目和表的访问权限,不然仍旧无法使用)
笔者在使用3.0.1版本的时候出现了一个问题:org.apache.commons.codec.binary.Base64类中的
encodeBase64String方法不存在,它导致了druid无法获取数据源对象。笔者在仔细检查后发现是commons-codec这个jar包的版本过低为1.3版,之后笔者将该版本改成1.8后,就能使用了。
出现这个错误,说明你的云账号没有该odps的访问权限,需要找该odps项目的管理员帮你开通相应的的权限
出现这个错误,说明你的账号可以访问该odps,但是没有xxx这张表的查询权限,也需要找管理员帮你开通相应的权限
转载地址:http://zktgn.baihongyu.com/