datasource
很多同学在进行编程学习时缺乏系统学习的资料。本页面基于datasource内容,从基础理论到综合实战,通过实用的知识类文章,标准的编程教程,丰富的视频课程,为您在datasource相关知识领域提供全面立体的资料补充。同时还包含 damain、dart、dataset 的知识内容,欢迎查阅!
datasource相关知识
-
Flink的DataSource三部曲之二:内置connector内容:所有原创文章分类汇总及配套源码,涉及Java、Docker、Kubernetes、DevOPS等; 本篇概览 本文是《Flink的DataSource三部曲》系列的第二篇,上一篇[《Flink的DataSource三部曲之一:直接API》]学习了StreamExecutionEnvironment的API创建DataSource,今天要练习的是Flink内置的connector,即下图的红框位置,这些connector可以通过StreamExecutionEnvironment的addSource方法使用: 今天的实战选择Kafka作为数据源来操作,先尝试接收和处理String型的消息,再接收JSON类型的消息,将JSON
-
Flink的DataSource三部曲之一:直接API欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java、Docker、Kubernetes、DevOPS等; 本文是《Flink的DataSource三部曲》系列的第一篇,该系列旨在通过实战学习和了解Flink的DataSource,为以后的深入学习打好基础,由以下三部分组成: 直接API:即本篇,除了准备环境和工程,还学习了StreamExecutionEnvironment提供的用来创建数据来的API; 内置connector:StreamExecutionEnvironment的addSource方法,入参可以是flink内置的con
-
利用 Spark DataSource API 实现Rest数据源Spark DataSource API 的提出使得各个数据源按规范实现适配,那么就可以高效的利用Spark 的计算能力。典型如Parquet,CarbonData,Postgrep(JDBC类的都OK)等实现。本文则介绍如何利用Spark DataSource 对标准Rest接口实现读取引子先说下这个需求的来源。通常在一个流式计算的主流程里,会用到很多映射数据,譬如某某对照关系,而这些映射数据通常是通过HTTP接口暴露出来的,尤其是外部系统,你基本没有办法直接通过JDBC去读库啥的。上面是一个点,其次是从HTTP读到的JSON数据,我其实需要做扁平化处理的。现在如果SQL作用于JSON数据可以解决简单的嵌套问题,但是更复杂的方式是没有太大办法的。比如下面格式的:{ "status":"200", "data":[ "id":1,  
-
Spark整合HBase(自定义HBase DataSource)背景Spark支持多种数据源,但是Spark对HBase 的读写都没有相对优雅的api,但spark和HBase整合的场景又比较多,故通过spark的DataSource API自己实现了一套比较方便操作HBase的API。写 HBase写HBase会根据Dataframe的schema写入对应数据类型的数据到Hbase,先上使用示例:import spark.implicits._import org.apache.hack.spark._ val df = spark.createDataset(Seq(("ufo", "play"), ("yy", ""))).toDF("name", "like")// 方式一val options =&n
datasource相关课程
-
SpringBoot+MyBatis搭建迷你小程序 用Spring Boot框架大大简化了新Spring应用的初始搭建以及开发过程,在开发人员中越来越受到欢迎。微信小程序作为目前炙手可热的应用,很有可能在未来占据轻应用的市场。本门课程的主要目的是将两者结合起来,同时希望作为入门翔仔之前实战课的一个更低门槛的课程进行讲解。本课分为三大部分:第一部分带领大家明确需求,从零开始进行SpringBoot+MyBatis的框架搭建;第二部分咱们将依据业务模块配合UT实现后端完整的增删改查功能;最后我们将来到微信小程序开发部分,帮大家入门微信小程序开发,并教会大家前后联调。老师相关实战课程:http://coding.imooc.com/class/144.html 老师的面试课程: https://coding.imooc.com/class/303.html
讲师:翔仔 中级 85627人正在学习
datasource相关教程
- 9.2 数据源 dataSource 在 xml 文件中对应<dataSource type="POOLED">,其中 type 属性代表了数据源的类型,可选的有三种类型,如下:UNPOOLED:非池化数据源,每次使用时打开,结束后关闭,不推荐。POOLED:池化数据源,连接池管理连接,推荐。JNDI:在 EJB 这类容器中使用,几乎不用。
- 5.2 更换数据源组件 需要将默认的数据源更换为支持分布式事务的数据源, MySQL 对应的数据源为 MysqlXADataSource , SQL Server 对应的数据源为 SQLServerXADataSource 。实例:/** * 数据源配置类 */@Configuration // 标注为配置类public class DataSourceConfig { // 注入数据源1配置项 @Value("${spring.datasource.db1.jdbc-url}") private String db1_url; @Value("${spring.datasource.db1.username}") private String db1_username; @Value("${spring.datasource.db1.password}") private String db1_password; // 注入数据源2配置项 @Value("${spring.datasource.db2.jdbc-url}") private String db2_url; @Value("${spring.datasource.db2.username}") private String db2_username; @Value("${spring.datasource.db2.password}") private String db2_password; /** * 数据源1 */ @Bean // 返回值注册为组件 public DataSource db1() throws SQLException { MysqlXADataSource dataSource = new MysqlXADataSource(); dataSource.setUrl(db1_url); dataSource.setUser(db1_username); dataSource.setPassword(db1_password); AtomikosDataSourceBean atomikosDataSourceBean = new AtomikosDataSourceBean(); atomikosDataSourceBean.setXaDataSource(dataSource); atomikosDataSourceBean.setUniqueResourceName("db1"); return atomikosDataSourceBean; } /** * 数据源2 */ @Bean // 返回值注册为组件 public DataSource db2() { SQLServerXADataSource dataSource = new SQLServerXADataSource(); dataSource.setURL(db2_url); dataSource.setUser(db2_username); dataSource.setPassword(db2_password); AtomikosDataSourceBean atomikosDataSourceBean = new AtomikosDataSourceBean(); atomikosDataSourceBean.setXaDataSource(dataSource); atomikosDataSourceBean.setUniqueResourceName("db2"); return atomikosDataSourceBean; }}
- 2.6 使用数据库管理用户名密码 Spring Security 支持使用数据库作为认证数据源,并且提供了默认数据模型。2.6.1 默认的数据模型使用 JDBC 数据源最简单直接的方法就是使用 Spring Security 提供的默认数据模型「users.ddl」构建认证数据库。users.ddl 的定义如下:create table users( username varchar_ignorecase(50) not null primary key, password varchar_ignorecase(50) not null, enabled boolean not null);create table authorities ( username varchar_ignorecase(50) not null, authority varchar_ignorecase(50) not null, constraint fk_authorities_users foreign key(username) references users(username));create unique index ix_auth_username on authorities (username,authority);使用此数据库描述文本,在我们的数据库中创建「用户表」和「权限表」,并在 Spring Security 项目中配置 JDBC 数据源。2.6.2 配置 JDBC 数据源 @Autowired private DataSource dataSource; @Autowired public void configAuthentication(AuthenticationManagerBuilder auth) throws Exception { auth.jdbcAuthentication().dataSource(dataSource); }如此,我们便可以用数据库中存储的用户名和密码进行登录校验了。
- 2.2 Zookeeper 管理数据源配置 首先我们需要使用 Curator 客户端来连接 Zookeeper 服务端,并且在 Spring IOC 容器中拿到 dataSource,保存它的信息到节点的 data 中,然后对该节点开启监听,监听到节点更新事件后,获取节点新的信息,并更新数据源。在 curator 目录中新建 CuratorService 类:package cn.cdd.zookeeper.config.curator;import com.alibaba.druid.pool.DruidDataSource;import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONObject;import org.apache.curator.framework.CuratorFramework;import org.apache.curator.framework.CuratorFrameworkFactory;import org.apache.curator.framework.recipes.cache.*;import org.apache.curator.retry.RetryForever;import org.apache.zookeeper.data.Stat;import org.springframework.context.ConfigurableApplicationContext;import java.nio.charset.StandardCharsets;import java.sql.SQLException;public class CuratorService { private ConfigurableApplicationContext applicationContext; public CuratorService(ConfigurableApplicationContext applicationContext) { this.applicationContext = applicationContext; } private static final String DATASOURCE_NODE = "/imooc/datasource"; /** * 构建 CuratorFramework 客户端,并开启会话 * * @return CuratorFramework */ public CuratorFramework buildCuratorClient() { // 使用 CuratorFrameworkFactory 构建 CuratorFramework CuratorFramework client = CuratorFrameworkFactory.builder() // Zookeeper 地址 .connectString("127.0.0.1:2181") // 重连策略 .retryPolicy(new RetryForever(10000)) .build(); // 开启会话 client.start(); return client; } /** * 保存数据源信息到 Zookeeper * * @param client CuratorFramework * @throws Exception Exception */ public void saveDataSource(CuratorFramework client) throws Exception { // 在 Spring IOC 容器中获取 dataSource DruidDataSource dataSource = (DruidDataSource) applicationContext.getBean("dataSource"); JSONObject jsonObject = new JSONObject(); jsonObject.put("DriverClassName", dataSource.getDriverClassName()); jsonObject.put("Url", dataSource.getUrl()); jsonObject.put("Username", dataSource.getUsername()); jsonObject.put("Password", dataSource.getPassword()); // 检查 Zookeeper 服务端是否存在 DATASOURCE_NODE 节点 Stat stat = client.checkExists().forPath(DATASOURCE_NODE); // 不存在则创建,并保存信息 if (stat == null) { client.create().creatingParentsIfNeeded().forPath(DATASOURCE_NODE, jsonObject.toJSONString().getBytes()); } else { // 存在则修改信息 client.setData().forPath(DATASOURCE_NODE, jsonObject.toJSONString().getBytes()); } } /** * 开启监听 * * @param client CuratorFramework */ public void startMonitoring(CuratorFramework client) { // 构建 CuratorCache 实例 CuratorCache cache = CuratorCache.build(client, DATASOURCE_NODE); // 使用 Fluent 风格和 lambda 表达式来构建 CuratorCacheListener 的事件监听 CuratorCacheListener listener = CuratorCacheListener.builder() // 开启对节点更新事件的监听 .forChanges((oldNode, newNode) -> { // 从新节点获取数据 byte[] data = newNode.getData(); String config = new String(data, StandardCharsets.UTF_8); if (!config.isEmpty()) { JSONObject jsonObject = JSON.parseObject(config); try { loadDataSource(jsonObject); } catch (SQLException e) { e.printStackTrace(); } System.err.println(">>> 从配置中心更新数据源: " + config); } }) // 初始化 .forInitialized(() -> System.out.println(">>> CuratorCacheListener 初始化")) // 构建 .build(); // 注册 CuratorCacheListener 到 CuratorCache cache.listenable().addListener(listener); // CuratorCache 开启缓存 cache.start(); } /** * 加载数据源 * * @param jsonObject 配置信息 * @throws SQLException SQLException */ private void loadDataSource(JSONObject jsonObject) throws SQLException { // 在 Spring IOC 容器中获取 dataSource DruidDataSource dataSource = (DruidDataSource) applicationContext.getBean("dataSource"); // 已经初始化的数据源需要重新启动 if (dataSource.isInited()) { dataSource.restart(); } // 更新数据源配置 dataSource.setDriverClassName(jsonObject.getString("DriverClassName")); dataSource.setUrl(jsonObject.getString("Url")); dataSource.setUsername(jsonObject.getString("Username")); dataSource.setPassword(jsonObject.getString("Password")); // 数据源初始化 dataSource.init(); }}完成 CuratorService 类后,我们还需要 ConfigurableApplicationContext 来获取 IOC 容器中的 dataSource,我们可以在主类 ZookeeperConfigApplication 中获取:package cn.cdd.zookeeper.config;import cn.cdd.zookeeper.config.curator.CuratorService;import org.apache.curator.framework.CuratorFramework;import org.mybatis.spring.annotation.MapperScan;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.context.ConfigurableApplicationContext;@SpringBootApplication@MapperScan(basePackages = "cn.cdd.zookeeper.config.dao")public class ZookeeperConfigApplication { public static void main(String[] args) { ConfigurableApplicationContext applicationContext = SpringApplication.run(ZookeeperConfigApplication.class, args); try { // 使用 applicationContext 初始化 CuratorService CuratorService curatorService = new CuratorService(applicationContext); // 获取 Curator 客户端 CuratorFramework client = curatorService.buildCuratorClient(); // 保存数据源信息 curatorService.saveDataSource(client); // 开启监听 curatorService.startMonitoring(client); } catch (Exception e) { e.printStackTrace(); } }}接下来我们就可以开启 Zookeeper ,来对数据源的变化进行测试了。
- 2.3 动态数据源测试 开启 Zookeeper 服务端,然后启动主类 ZookeeperConfigApplication 的 main 方法,查看控制台输出:>>> CuratorCacheListener 初始化这行输出说明监听已经开启了,现在就可以访问 http://localhost:8888/imooc/getAll 来查询数据库的数据了:[{"id":1,"username":"Java","password":"123","phone":"123","address":"北京"},{"id":2,"username":"Go","password":"321","phone":"321","address":"上海"},{"id":3,"username":"Python","password":"456","phone":"654","address":"深圳"}]访问成功,接下来我们使用 Zookeeper 命令行客户端连接 Zookeeper 服务端查询节点数据:# 查询节点数据get /imooc/datasource# 打印数据{"Username":"root","DriverClassName":"com.mysql.cj.jdbc.Driver","Url":"jdbc:mysql://localhost:3306/imooc?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai","Password":"021998"}我们可以看见 /imooc/datasource 节点已经保存的数据源信息了。在修改数据源信息之前,我们需要在 MySQL新建另一个数据 wiki,然后在 wiki 数据库下新建 imooc 数据表:/* Navicat Premium Data Transfer Source Server : localhost Source Server Type : MySQL Source Server Version : 80019 Source Host : localhost:3306 Source Schema : wiki Target Server Type : MySQL Target Server Version : 80019 File Encoding : 65001 Date: 25/09/2020 00:55:14*/SET NAMES utf8mb4;SET FOREIGN_KEY_CHECKS = 0;-- ------------------------------ Table structure for imooc-- ----------------------------DROP TABLE IF EXISTS `imooc`;CREATE TABLE `imooc` ( `id` int(0) NOT NULL AUTO_INCREMENT, `username` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `password` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `phone` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `address` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;-- ------------------------------ Records of imooc-- ----------------------------INSERT INTO `imooc` VALUES (1, 'C', '789', '987', '北京');INSERT INTO `imooc` VALUES (2, 'C#', '567', '765', '上海');INSERT INTO `imooc` VALUES (3, 'C++', '654', '456', '深圳');SET FOREIGN_KEY_CHECKS = 1;完成上面的操作后,我们就可以修改数据源信息了,使用 set 命令修改 data :# 修改 imooc 数据库为 wiki 数据库set /imooc/datasource {"Username":"root","DriverClassName":"com.mysql.cj.jdbc.Driver","Url":"jdbc:mysql://localhost:3306/wiki?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai","Password":"021998"}执行修改命令后,我我们查看控制台输出:{dataSource-0} restart{dataSource-0} closing ...{dataSource-0} closed{dataSource-1} inited>>> 从配置中心更新数据源: {"Username":"root","DriverClassName":"com.mysql.cj.jdbc.Driver","Url":"jdbc:mysql://localhost:3306/wiki?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai","Password":"021998"}我们发现,dataSource 重新启动并初始化了。接下来我们再访问 http://localhost:8888/imooc/getAll 来查询数据库的数据:[{"id":1,"username":"C","password":"789","phone":"987","address":"北京"},{"id":2,"username":"C#","password":"567","phone":"765","address":"上海"},{"id":3,"username":"C++","password":"654","phone":"456","address":"深圳"}]我们发现数据变成了 wiki 数据库的信息,说明我们的动态数据源配置成功。
- 3.1 配置文件 首先,我们在resources目录下新建mybatis-config.xml配置文件,并在其中添加上如下配置:<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/imooc?useSSL=false"/> <property name="username" value="root"/> <property name="password" value="123456"/> </dataSource> </environment> </environments></configuration>有了上面编程式 API 的使用经验,那么你一定可以轻松的看懂配置项,configuration 标签对应 Configuration 类,environment 标签对应 Environment 类,transactionManager标签和dataSource标签分别对应 JdbcTransactionFactory 和 PooledDataSource 类。有了配置文件后,我们无需一个挨着一个的新建类,而是在配置文件中指定即可,如driver的值指定为com.mysql.cj.jdbc.Driver。当后续需要修改的时候,也不需要去代码中找,而是直接在配置文件中修改即可。TIPS: 注意, 请在你自己的配置文件中修改数据库配置,以满足你自己的数据库环境。
datasource相关搜索
-
daima
damain
dart
dataset
datasource
datediff
datediff函数
datepicker
datetime
db4o
dbi
dcloud
deallocate
debian安装
debugger
debugging
declaration
declarations
declare
decode函数