SpringBoot整合ShardingSphere的示例代码

目录
  • 一、相关依赖
  • 二、Nacos数据源配置
  • 三、项目配置
  • 四、验证

概要: ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(计划中)这3款相互独立的产品组成。 他们均提供标准化的数据分片、分布式事务和数据库治理功能,可适用于如Java同构、异构语言、云原生等各种多样化的应用场景。

官网地址:https://shardingsphere.apache.org/

一、相关依赖

<dependency>
   <groupId>io.shardingsphere</groupId>
    <artifactId>sharding-core</artifactId>
    <version>3.1.0</version>
</dependency>
<dependency>
    <groupId>io.shardingsphere</groupId>
    <artifactId>sharding-jdbc-spring-namespace</artifactId>
    <version>3.1.0</version>
</dependency>

二、Nacos数据源配置

sharding:
  dataSource:
    db0:
      driverClassName: com.mysql.cj.jdbc.Driver
      url: mysql://127.0.0.1:3306/demo0
      username: root
      password: 123456
    db1:
      driverClassName: com.mysql.cj.jdbc.Driver
      url: mysql://127.0.0.1:3306/demo1
      username: root
      password: 123456

三、项目配置

bootstrap-dev.properties
spring:
  application:
    name: demo
  cloud:
    nacos:
      server-addr: 127.0.0.1:8848
      config:
        namespace: 9c6b8156-d045-463d-8fe6-4658ce78d0cc
        file-extension: yml

SqlSessionConfig

package com.example.demo.config;

import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;

import org.apache.ibatis.plugin.Interceptor;
import org.mybatis.spring.mapper.MapperScannerConfigurer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;

import javax.sql.DataSource;

@Configuration
public class SqlSessionConfig {

    private Logger logger = LoggerFactory.getLogger(SqlSessionConfig.class);

    @Bean("mySqlSessionFactoryBean")
    public MybatisSqlSessionFactoryBean createSqlSessionFactory(@Qualifier("datasource") DataSource dataSource,
                                                                @Qualifier("paginationInterceptor") PaginationInterceptor paginationInterceptor) {

        // MybatisSqlSessionFactory
        MybatisSqlSessionFactoryBean sqlSessionFactoryBean = null;
        try {
            // 实例SessionFactory
            sqlSessionFactoryBean = new MybatisSqlSessionFactoryBean();
            // 配置数据源
            sqlSessionFactoryBean.setDataSource(dataSource);
            // 设置 MyBatis-Plus 分页插件
            Interceptor [] plugins = {paginationInterceptor};
            sqlSessionFactoryBean.setPlugins(plugins);
            // 加载MyBatis配置文件
            PathMatchingResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver();
            sqlSessionFactoryBean.setMapperLocations(resourcePatternResolver.getResources("classpath*:mapper/*.xml"));
        } catch (Exception e) {
            logger.error("创建SqlSession连接工厂错误:{}", e.getMessage());
        }
        return sqlSessionFactoryBean;
    }

    @Bean
    public MapperScannerConfigurer myGetMapperScannerConfigurer() {
        MapperScannerConfigurer myMapperScannerConfigurer = new MapperScannerConfigurer();
        myMapperScannerConfigurer.setBasePackage("com.example.demo.mapper");
        myMapperScannerConfigurer.setSqlSessionFactoryBeanName("mySqlSessionFactoryBean");
        return myMapperScannerConfigurer;
    }
}

DataSourceConfig

package com.example.demo.config;

import com.alibaba.druid.pool.DruidDataSource;
import io.shardingsphere.api.config.rule.ShardingRuleConfiguration;
import io.shardingsphere.shardingjdbc.api.ShardingDataSourceFactory;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;

@Configuration
@ConfigurationProperties(prefix = "sharding")
public class DataSourceConfig  {

    private Map<String, DruidDataSource> dataSource;

    public Map<String, DruidDataSource> getDataSource() {
        return dataSource;
    }

    public void setDataSource(Map<String, DruidDataSource> dataSource) {
        this.dataSource = dataSource;
    }

    @Bean("datasource")
    public DataSource getDataSource(@Qualifier("shardingConfig") ShardingRuleConfiguration shardingRuleConfig,
                                    @Qualifier("properties") Properties properties) throws SQLException {

        Map<String, DataSource> dataSourceMap = new HashMap<>();
        dataSource.forEach(dataSourceMap::put);
        return ShardingDataSourceFactory.createDataSource(dataSourceMap, shardingRuleConfig, new HashMap<>(), properties);
    }

    @Bean("properties")
    public Properties getProperties(){
        // 获取数据源对象
        Properties props=new Properties();
        /*
         * ==== Properties取值范围 ====
         *
         * SQL_SHOW("sql.show", String.valueOf(Boolean.FALSE), Boolean.TYPE),
         * ACCEPTOR_SIZE("acceptor.size", String.valueOf(Runtime.getRuntime().availableProcessors() * 2), Integer.TYPE),
         * EXECUTOR_SIZE("executor.size", String.valueOf(0), Integer.TYPE),
         * MAX_CONNECTIONS_SIZE_PER_QUERY("max.connections.size.per.query", String.valueOf(1), Integer.TYPE),
         * PROXY_FRONTEND_FLUSH_THRESHOLD("proxy.frontend.flush.threshold", String.valueOf(128), Integer.TYPE),
         * PROXY_TRANSACTION_TYPE("proxy.transaction.type", "LOCAL", String.class),
         * PROXY_OPENTRACING_ENABLED("proxy.opentracing.enabled", String.valueOf(Boolean.FALSE), Boolean.TYPE),
         * PROXY_BACKEND_USE_NIO("proxy.backend.use.nio", String.valueOf(Boolean.FALSE), Boolean.TYPE),
         * PROXY_BACKEND_MAX_CONNECTIONS("proxy.backend.max.connections", String.valueOf(8), Integer.TYPE),
         * PROXY_BACKEND_CONNECTION_TIMEOUT_SECONDS("proxy.backend.connection.timeout.seconds", String.valueOf(60), Integer.TYPE),
         * CHECK_TABLE_METADATA_ENABLED("check.table.metadata.enabled", String.valueOf(Boolean.FALSE), Boolean.TYPE);
         */
        props.put("sql.show", "true");
        return props;
    }
}

ShardingRuleConfig

package com.example.demo.config;

import io.shardingsphere.api.config.rule.ShardingRuleConfiguration;
import io.shardingsphere.core.yaml.sharding.YamlShardingConfiguration;
import io.shardingsphere.core.yaml.sharding.YamlShardingRuleConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.beans.factory.annotation.Value;

import java.io.File;

@Configuration
public class ShardingRuleConfig implements ApplicationContextAware  {

 /* 获取环境变量 */
 @Value("${spring.profiles.active}")
    private String profile;

    @Bean("shardingConfig")
    public ShardingRuleConfiguration getShardingRuleConfig() throws Exception {

  // 获取yml路由规则配置文件
        File yamlFile = new File("src/main/resources/sharding/" + profile + "/sharding.yml");
        YamlShardingConfiguration yamlShardingRuleConfiguration = YamlShardingConfiguration.unmarshal(yamlFile);
        YamlShardingRuleConfiguration shardingRule = yamlShardingRuleConfiguration.getShardingRule();
        if (null == shardingRule) {
            throw new Exception("YamlShardingRuleConfiguration is Null!");
        }
        return shardingRule.getShardingRuleConfiguration();

    }
}

src/main/resources/dev/sharding.yml

shardingRule:
  tables:
    user:
      actualDataNodes: db${0..1}.user${0..1}
      databaseStrategy:
        inline:
          shardingColumn: id
          algorithmExpression: db${id % 2}
      tableStrategy:
        inline:
          shardingColumn: id
          algorithmExpression: user${id % 2}

注:修复相同路由字段导致部分分表无法落地数据,可以自定义相应规则,例如修改为以下配置:

shardingRule:
  tables:
    user:
      actualDataNodes: db${0..1}.user${0..1}
      databaseStrategy:
        inline:
          shardingColumn: id
          algorithmExpression: db${Math.round(id / 2) % 2}
      tableStrategy:
        inline:
          shardingColumn: id
          algorithmExpression: user${id % 2}

四、验证

2020-05-11 09:51:09.239  INFO 6352 --- [           main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration' of type [org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration$$EnhancerBySpringCGLIB$$dd8e22ae] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.2.6.RELEASE)

2020-05-11 09:51:09.479  INFO 6352 --- [           main] c.a.c.n.c.NacosPropertySourceBuilder     : Loading nacos data, dataId: 'demo', group: 'DEFAULT_GROUP', data: spring:
  profiles:
    active: dev

sharding:
  datasource:
    db0:
      driverClassName: com.mysql.cj.jdbc.Driver
      jdbc-url: jdbc:mysql://106.13.181.6:3306/demo0
      username: root
      password: 123456
    db1:
      driverClassName: com.mysql.cj.jdbc.Driver
      jdbc-url: jdbc:mysql://106.13.181.6:3306/demo1
      username: root
      password: 123456
2020-05-11 09:51:09.489  WARN 6352 --- [           main] c.a.c.n.c.NacosPropertySourceBuilder     : Ignore the empty nacos configuration and get it based on dataId[demo.yml] & group[DEFAULT_GROUP]
2020-05-11 09:51:09.495  WARN 6352 --- [           main] c.a.c.n.c.NacosPropertySourceBuilder     : Ignore the empty nacos configuration and get it based on dataId[demo-dev.yml] & group[DEFAULT_GROUP]
2020-05-11 09:51:09.495  INFO 6352 --- [           main] b.c.PropertySourceBootstrapConfiguration : Located property source: CompositePropertySource {name='NACOS', propertySources=[NacosPropertySource {name='demo-dev.yml'}, NacosPropertySource {name='demo.yml'}, NacosPropertySource {name='demo'}]}
2020-05-11 09:51:09.499  INFO 6352 --- [           main] com.example.demo.DemoApplication         : The following profiles are active: dev
2020-05-11 09:51:09.965  WARN 6352 --- [           main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'userMapper' and 'com.example.demo.mapper.UserMapper' mapperInterface. Bean already defined with the same name!
2020-05-11 09:51:09.965  WARN 6352 --- [           main] o.m.s.mapper.ClassPathMapperScanner      : No MyBatis mapper was found in '[com.example.demo.mapper]' package. Please check your configuration.
2020-05-11 09:51:09.966  INFO 6352 --- [           main] o.s.c.a.ConfigurationClassPostProcessor  : Cannot enhance @Configuration bean definition 'sqlSessionConfig' since its singleton instance has been created too early. The typical cause is a non-static @Bean method with a BeanDefinitionRegistryPostProcessor return type: Consider declaring such methods as 'static'.
2020-05-11 09:51:09.989  INFO 6352 --- [           main] o.s.cloud.context.scope.GenericScope     : BeanFactory id=3955a554-148e-313a-91f9-d6a10f2dc8c3
2020-05-11 09:51:10.150  INFO 6352 --- [           main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration' of type [org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration$$EnhancerBySpringCGLIB$$dd8e22ae] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2020-05-11 09:51:10.380  INFO 6352 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2020-05-11 09:51:10.386  INFO 6352 --- [           main] o.a.coyote.http11.Http11NioProtocol      : Initializing ProtocolHandler ["http-nio-8080"]
2020-05-11 09:51:10.387  INFO 6352 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2020-05-11 09:51:10.387  INFO 6352 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.33]
2020-05-11 09:51:10.507  INFO 6352 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2020-05-11 09:51:10.508  INFO 6352 --- [           main] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 994 ms
2020-05-11 09:51:10.770  INFO 6352 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2020-05-11 09:51:11.562  INFO 6352 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
2020-05-11 09:51:11.570  INFO 6352 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-2 - Starting...
2020-05-11 09:51:12.226  INFO 6352 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-2 - Start completed.
 _ _   |_  _ _|_. ___ _ |    _
| | |\/|_)(_| | |_\  |_)||_|_\
     /               |
                        3.3.1
2020-05-11 09:51:12.876  WARN 6352 --- [           main] c.n.c.sources.URLConfigurationSource     : No URLs will be polled as dynamic configuration sources.
2020-05-11 09:51:12.877  INFO 6352 --- [           main] c.n.c.sources.URLConfigurationSource     : To enable URLs as dynamic configuration sources, define System property archaius.configurationSource.additionalUrls or make config.properties available on classpath.
2020-05-11 09:51:12.880  WARN 6352 --- [           main] c.n.c.sources.URLConfigurationSource     : No URLs will be polled as dynamic configuration sources.
2020-05-11 09:51:12.880  INFO 6352 --- [           main] c.n.c.sources.URLConfigurationSource     : To enable URLs as dynamic configuration sources, define System property archaius.configurationSource.additionalUrls or make config.properties available on classpath.
2020-05-11 09:51:13.019  INFO 6352 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2020-05-11 09:51:13.257  INFO 6352 --- [           main] o.s.s.c.ThreadPoolTaskScheduler          : Initializing ExecutorService
2020-05-11 09:51:13.477  INFO 6352 --- [           main] o.a.coyote.http11.Http11NioProtocol      : Starting ProtocolHandler ["http-nio-8080"]
2020-05-11 09:51:13.495  INFO 6352 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2020-05-11 09:51:13.554  INFO 6352 --- [           main] c.a.c.n.registry.NacosServiceRegistry    : nacos registry, DEFAULT_GROUP demo 10.118.37.75:8080 register finished
2020-05-11 09:51:13.621  INFO 6352 --- [           main] com.example.demo.DemoApplication         : Started DemoApplication in 5.276 seconds (JVM running for 6.226)
2020-05-11 09:51:16.719  INFO 6352 --- [nio-8080-exec-2] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
2020-05-11 09:51:16.720  INFO 6352 --- [nio-8080-exec-2] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
2020-05-11 09:51:16.730  INFO 6352 --- [nio-8080-exec-2] o.s.web.servlet.DispatcherServlet        : Completed initialization in 10 ms
2020-05-11 09:51:16.792  INFO 6352 --- [nio-8080-exec-2] com.example.demo.config.LogAspect        :
 请求信息:
【请求地址】:/demo/create
【请求头】:content-type = application/json, user-agent = PostmanRuntime/7.24.0, accept = */*, postman-token = 25dbfb89-782d-45b2-bbb1-b41380c27af7, host = localhost:8080, accept-encoding = gzip, deflate, br, connection = keep-alive, content-length = 61
【请求方法】:String com.example.demo.controller.UserController.create(UserDTO)
【请求参数】:[UserDTO(id=123458, name=zhangsan, phone=17751033130, sex=1)]
2020-05-11 09:51:16.832 DEBUG 6352 --- [nio-8080-exec-2] c.example.demo.mapper.UserMapper.insert  : ==>  Preparing: INSERT INTO user ( id, name, sex, phone, create_time, enable, version ) VALUES ( ?, ?, ?, ?, ?, ?, ? )
2020-05-11 09:51:16.848 DEBUG 6352 --- [nio-8080-exec-2] c.example.demo.mapper.UserMapper.insert  : ==> Parameters: 123458(Long), zhangsan(String), MAN(String), 17751033130(String), 2020-05-11T09:51:16.797(LocalDateTime), true(Boolean), 1(Long)
2020-05-11 09:51:16.905  INFO 6352 --- [nio-8080-exec-2] ShardingSphere-SQL                       : Rule Type: sharding
2020-05-11 09:51:16.905  INFO 6352 --- [nio-8080-exec-2] ShardingSphere-SQL                       : Logic SQL: INSERT INTO user  ( id,
name,
sex,
phone,
create_time,
enable,
version )  VALUES  ( ?,
?,
?,
?,
?,
?,
? )
2020-05-11 09:51:16.905  INFO 6352 --- [nio-8080-exec-2] ShardingSphere-SQL                       : SQLStatement: InsertStatement(super=DMLStatement(super=io.shardingsphere.core.parsing.parser.sql.dml.insert.InsertStatement@362afd05), columns=[Column(name=id, tableName=user), Column(name=name, tableName=user), Column(name=sex, tableName=user), Column(name=phone, tableName=user), Column(name=create_time, tableName=user), Column(name=enable, tableName=user), Column(name=version, tableName=user)], generatedKeyConditions=[], insertValues=InsertValues(insertValues=[InsertValue(type=VALUES, expression=( ?,
?,
?,
?,
?,
?,
? ), parametersCount=7)]), columnsListLastPosition=71, generateKeyColumnIndex=-1, insertValuesListLastPosition=105)
2020-05-11 09:51:16.905  INFO 6352 --- [nio-8080-exec-2] ShardingSphere-SQL                       : Actual SQL: db0 ::: INSERT INTO user0  ( id,
name,
sex,
phone,
create_time,
enable,
version )  VALUES  ( ?,
?,
?,
?,
?,
?,
? ) ::: [[123458, zhangsan, MAN, 17751033130, 2020-05-11T09:51:16.797, true, 1]]
2020-05-11 09:51:17.132 DEBUG 6352 --- [nio-8080-exec-2] c.example.demo.mapper.UserMapper.insert  : <==    Updates: 1
2020-05-11 09:51:17.135  INFO 6352 --- [nio-8080-exec-2] com.example.demo.config.LogAspect        :
 执行结果:
【响应结果】:"ok"
【执行耗时】:343毫秒

到此这篇关于SpringBoot整合ShardingSphere的示例代码的文章就介绍到这了,更多相关SpringBoot整合ShardingSphere内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Springboot2.x+ShardingSphere实现分库分表的示例代码

    之前一篇文章中我们讲了基于Mysql8的读写分离(文末有链接),这次来说说分库分表的实现过程. 概念解析 垂直分片 按照业务拆分的方式称为垂直分片,又称为纵向拆分,它的核心理念是专库专用. 在拆分之前,一个数据库由多个数据表构成,每个表对应着不同的业务.而拆分之后,则是按照业务将表进行归类,分布到不同的数据库中,从而将压力分散至不同的数据库. 下图展示了根据业务需要,将用户表和订单表垂直分片到不同的数据库的方案. 垂直分片往往需要对架构和设计进行调整.通常来讲,是来不及应对互联网业务需求快速变化

  • SpringBoot整合ShardingSphere的示例代码

    目录 一.相关依赖 二.Nacos数据源配置 三.项目配置 四.验证 概要: ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC.Sharding-Proxy和Sharding-Sidecar(计划中)这3款相互独立的产品组成. 他们均提供标准化的数据分片.分布式事务和数据库治理功能,可适用于如Java同构.异构语言.云原生等各种多样化的应用场景. 官网地址:https://shardingsphere.apache.org/ 一.相关

  • SpringBoot 整合 JMSTemplate的示例代码

    1.1 添加依赖   可以手动在 SpringBoot 项目添加依赖,也可以在项目创建时选择使用 ActiveMQ 5 自动添加依赖.高版本 SpringBoot (2.0 以上) 在添加 activemq 连接池依赖启动时会报 Error creating bean with name 'xxx': Unsatisfied dependency expressed through field 'jmsTemplate'; 可以将 activemq 连接池换成 jms 连接池解决. <depen

  • SpringBoot整合SpringDataRedis的示例代码

      本文介绍下SpringBoot如何整合SpringDataRedis框架的,SpringDataRedis具体的内容在前面已经介绍过了,可自行参考. 1.创建项目添加依赖   创建SpringBoot项目,并添加如下依赖: <dependencies> <!-- springBoot 的启动器 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId

  • SpringBoot整合MyBatis-Plus的示例代码

    目录 前言 源码 环境 开发工具 SQL脚本 正文 单工程 POM文件(注意) application.properties(注意) 自定义配置(注意) 实体类(注意) Mapper接口(注意) Service服务实现类(注意) Controller前端控制器(注意) SpringBoot启动类(注意) 启用项目,调用接口(注意) 多工程 commons工程-POM文件 MyBatis-Plus commons工程-system.properties commons工程- 自定义配置 commo

  • springboot 整合sentinel的示例代码

    目录 1. 安装sentinel 2.客户端连接 1. 安装sentinel 下载地址:https://github.com/alibaba/Sentinel/releases/tag/1.7.0 ,由于我无法下载,所以使用docker安装, yuchunfang@yuchunfangdeMacBook-Pro ~ % docker pull bladex/sentinel-dashboard:1.7.0 yuchunfang@yuchunfangdeMacBook-Pro ~ % docker

  • springboot 整合hbase的示例代码

    目录 前言 HBase 定义 HBase 数据模型 物理存储结构 数据模型 1.Name Space 2.Region 3.Row 4.Column 5.Time Stamp 6.Cell 搭建步骤 1.官网下载安装包: 2.配置hadoop环境变量 3.修改 hbase-env.cmd配置文件 4.修改hbase-site.xml 文件 5.启动hbase服务 6.hbase客户端测试 Java API详细使用 1.导入客户端依赖 2.DDL相关操作 3.DML相关操作 插入数据与查询数据 H

  • springboot整合xxl-job的示例代码

    目录 关于xxl-job 调度中心 执行器 关于xxl-job 在我看来,总体可以分为三大块: 调度中心 执行器 配置定时任务 调度中心 简单来讲就是 xxl-job-admin那个模块,配置: 从doc里面取出xxl-job.sql的脚本文件,创建对应的数据库. 进行配置文件的配置,如下图 进行日志存放位置的修改 然后idea打包之后就能当作调度中心运行了 访问地址:ip:port/xxl-job-admin 默认的账号密码:admin/123456 注意:你进去后修改密码,有些浏览器就算你账

  • SpringBoot整合Liquibase的示例代码

    目录 整合1 整合2 SpringBoot整合Liquibase虽然不难但坑还是有一点的,主要集中在配置路径相关的地方,在此记录一下整合的步骤,方便以后自己再做整合时少走弯路,当然也希望能帮到大家~ 整合有两种情况 在启动项目时自动执行脚本,若新添加了Liquibase脚本需要重启项目才能执行脚本 在不启动项目时也能通过插件或指令手动让它执行脚本 整合要么只整合1,要么1.2一起整合 只整合2不整合1的话,项目启动时会生成liquibase相关的bean时报错 整合1 引入Maven依赖 这里导

  • Springboot整合kafka的示例代码

    目录 1. 整合kafka 2. 消息发送 2.1 发送类型 2.2 序列化 2.3 分区策略 3. 消息消费 3.1 消息组别 3.2 位移提交 1. 整合kafka 1.引入依赖 <dependency> <groupId>org.springframework.kafka</groupId> <artifactId>spring-kafka</artifactId> </dependency> 2.设置yml文件 spring:

  • SpringBoot整合JdbcTemplate的示例代码

    目录 前言 初始化SpringBoot项目 使用IDEA创建项目 导入JDBC依赖 导入数据库驱动 修改配置文件 数据库sys_user表结构 测试类代码 查询sys_user表数据量 查询sys_user表一条数据 查询sys_user表所有数据 新增sys_user表一条数据 修改sys_user表一条数据 删除sys_user表一条数据 总结 前言 Spring对数据库的操作在jdbc上面做了更深层次的封装,而JdbcTemplate便是Spring提供的一个操作数据库的便捷工具.我们可以

随机推荐