0%

Mycat配置读写分离

配置schema.xml配置文件,schema.xml管理着mycat的逻辑库、表、分片规则、DataNode以及DataSource

  • schema标签用于定义mycat实例中的逻辑库
  • table标签定义mycat中的逻辑表
  • dataNode标签定义mycat中的数据节点
  • dataHost标签定义具体的数据库实例、读写分离配置和心跳检测
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">

<!-- 逻辑库 可以配置多个逻辑库 -->
<schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="100" dataNode="dn1">

</schema>

<!-- 数据节点,真实的数据库 -->
<dataNode name="dn1" dataHost="host1" database="mybatis" />

<!-- 数据主机配置
balance是用来配置读写分离的
0:不开启读写分离,所有的读请求都发送到当前可用的writeHost写主机上
1:全部的readHost与writeHost(备主写)参与select语句的负载均衡,双主双从,且双主互为主备
2:所有的读操作随机在writeHost和readHost上分发
3:所有的读请求随机分发到readHost,writeHost不负担读压力

writeType 多主配置使用
0:所有写操作都发送到第一个writeHost,第一个挂了切换到第二个writeHost
1:所有写操作都随机发送到配置的writeHost,1.5后废弃不推荐使用

switchType 写主机切换方式
1:默认值,自动切换
-1:不自动切换
2:基于Mysql主从同步的状态决定是否切换
-->
<dataHost name="host1" maxCon="1000" minCon="10" balance="3"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<!-- 心跳检测 -->
<heartbeat>select user()</heartbeat>
<!-- can have multi write hosts -->
<!-- 写主机 -->
<writeHost host="hostM1" url="localhost:3306" user="root"
password="123456">
</writeHost>

<!-- 读主机 -->
<readHost host="hostS1" url="localhost:3307" user="root"
password="123456"></readHost>
</dataHost>
</mycat:schema>

Spring Boot 核心注解详解:从原理到实战应用

Spring Boot 的核心设计理念是 “约定大于配置”,而实现这一理念的核心载体就是注解。它通过注解替代了传统 Spring 中繁琐的 XML 配置,简化了 Bean 注册、自动配置、条件判断等核心流程。从 “注解作用→底层原理→使用场景→实战示例” 四个维度,系统讲解 Spring Boot 中最关键的注解,帮你理解注解背后的逻辑,灵活应对各类开发场景。

@SpringBootApplication:Spring Boot 应用的 “入口注解”

@SpringBootApplication 是 Spring Boot 项目的 “门面注解”,标注在主程序类上,表明该类是 Spring Boot 应用的入口,同时整合了三个核心注解的功能,是 “一站式开启 Spring Boot 功能” 的关键。

1. 注解本质:三个核心注解的组合

从源码可知,@SpringBootApplication复合注解,本质是 @SpringBootConfiguration@EnableAutoConfiguration@ComponentScan 的组合:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
// 1. 声明 Spring Boot 配置类
@SpringBootConfiguration
// 2. 开启自动配置(核心)
@EnableAutoConfiguration
// 3. 开启组件扫描
@ComponentScan(excludeFilters = {
@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class)
})
public @interface SpringBootApplication {
// 核心属性:排除指定的自动配置类
Class<?>[] exclude() default {};
String[] excludeName() default {};
}

2. 子注解的核心作用

(1)@SpringBootConfiguration:Spring Boot 配置类标识
  • 本质:对 Spring 原生@Configuration注解的 “语义化封装”,源码如下:

阅读全文 »

Tomcat 配置 Web 应用位置:从默认到自定义部署

Tomcat 作为主流的 Java Web 服务器,提供了灵活的 Web 应用部署方式。默认情况下,Tomcat 会自动加载webapps目录下的应用,但实际开发中常需要将应用部署到自定义路径。本文详细讲解 Tomcat 应用部署的默认机制、自定义配置方法及优先级规则,帮助灵活管理 Web 应用。

默认部署:依赖webapps目录

Tomcat 默认将webapps目录作为应用部署的根目录,其核心配置在conf/server.xmlHost标签中:

1
2
3
4
<Host name="localhost"  appBase="webapps"
unpackWARs="true" autoDeploy="true">
<!-- 其他配置... -->
</Host>

关键参数说明

  • appBase:指定应用部署的基础目录(默认webapps),可以是相对路径(相对于 Tomcat 安装目录)或绝对路径(如/data/webapps);
  • unpackWARs="true":自动解压webapps目录下的 WAR 包(解压后生成同名文件夹);
  • autoDeploy="true":Tomcat 运行时,若webapps目录新增 WAR 包或应用,会自动部署无需重启。

默认部署的特点

  • 无需额外配置,将 WAR 包或应用文件夹放入webapps即可访问;
  • 访问路径规则:
    • 应用文件夹名为myapp → 访问路径http://localhost:8080/myapp
    • 应用文件夹名为ROOT → 访问路径http://localhost:8080(默认应用)。

自定义部署:通过Context配置指定路径

若需将应用部署到webapps以外的路径(如/data/projects/myapp),需通过Context标签手动配置,核心参数如下:

阅读全文 »

Mycat配置文件

Mycat简介中有提到Mycat有三个重要的配置文件schema.xmlserver.xmlrule.xml ,还有一些其他的依赖配置文件,接下来就分别介绍一下

server.xml配置文件

定义Mycat用户以及系统相关变量,如用户名、密码、端口等

两个重要的标签为user标签和system标签

user标签

主要用于定义登录Mycat的用户和权限

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<!-- 用户 name表示用户名-->
<user name="mycat" defaultAccount="true">

<property name="password">123456</property>
<!-- 该用户可以访问的schema -->
<property name="schemas">TESTDB,db1,db2</property>
<property name="defaultSchema">TESTDB</property>
<!-- 是否只读 -->
<property name="readOnly">true</property>
<!-- benchmark用于现在整体连接数量,如果为0或不设置则表示不限制 -->
<property name="benchmark">1000</property>
<!-- 是否使用密码加密功能,默认为0
加密命令为java -cp Mycat-server-1.6.7.4-release.jar org.opencloudb.util.DecryptUtil 0:user:password
-->
<property name="usingDecrypt">1000</property>
<!--No MyCAT Database selected 错误前会尝试使用该schema作为schema,不设置则为null,报错 -->

<!-- 表级 DML 权限设置 -->
<!--
<privileges check="false">
<schema name="TESTDB" dml="0110" >
<table name="tb01" dml="0000"></table>
<table name="tb02" dml="1111"></table>
</schema>
</privileges>
-->
</user>
阅读全文 »

Mycat简介

Mycat是一款数据库中间件,一端连数据库,一端连java应用,可以支持MySQL、SQL Server、Oracle、DB2、PostgreSQL等主流数据,用于解决以下问题

  • java与数据库紧耦合
  • 高访问量、高并发对数据库压力
  • 读写请求数据不一致

可以用来做 读写分离数据分片多数据源整合

Mycat的原理就是拦截用户发送的SQL语句,对SQL语句做特定的分析:如分片分析、路由分析、读写分离分析、缓存分析等,然后将此SQL语句发送到真实数据库,并将返回的结果做适当的处理,最终再返回给用户

属于中间件代理,偏运维

阅读全文 »