0%

安全设置

Mycat作为一个连接数据库的中间件,距离数据是非常的近,所以还是需要进行一些安全的设置

权限控制

在server.xml中配置user标签进行权限控制

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
<!-- 用户 -->
<user name="mycat" defaultAccount="true">

<property name="password">123456</property>
<property name="schemas">TESTDB</property>
<property name="defaultSchema">TESTDB</property>
<!--No MyCAT Database selected 错误前会尝试使用该schema作为schema,不设置则为null,报错 -->

<!-- 库级 表级 DML 权限设置
check为true则检查权限
dml权限
0000 禁止insert、update、select、delete
0010 可以select
1110 可以insert、uodate、select
1111 都可以
-->
<!--
<privileges check="false">
<schema name="TESTDB" dml="0110" >
<table name="tb01" dml="0000"></table>
<table name="tb02" dml="1111"></table>
</schema>
</privileges>
-->
</user>

<user name="user">
<property name="password">user</property>
<property name="schemas">TESTDB</property>
<!-- 只读 -->
<property name="readOnly">true</property>
<property name="defaultSchema">TESTDB</property>
</user>
阅读全文 »

分布式全局序列

由于Mycat进行分表操作,为了保证整个表的不同分片中的id要全局唯一,不可以使用mysql的自增id,那么如何进行全局序列的生成?

Mycat提供了三种生成全局序列的方式,本地文件、数据库方式、时间戳方式

在server.xml中配置sequnceHandlerType

1
2
<!-- 指定使用Mycat全局序列的类型。0为本地文件方式,1为数据库方式,2为时间戳序列方式 -->
<property name="sequnceHandlerType">1</property>

本地文件

Mycat将序列号配置到文件中,当使用序列号中的配置后,Mycat会更新classpath中sequence_conf.properties文件中sequence当前的值

阅读全文 »

Maven 资源管理:配置文件过滤与 Web 资源处理

Maven 不仅能管理依赖,还能灵活处理项目资源文件(如配置文件、静态资源),通过资源过滤实现动态替换变量,适配不同环境。本文将详细介绍 Maven 资源管理的配置方法,包括普通资源过滤和 Web 项目资源处理。

资源管理的核心概念

资源文件指项目中除源码外的所有文件,如:

  • 配置文件(application.propertieslog4j.xml)。
  • 静态资源(CSS、JS、图片)。
  • 模板文件(JSP、Thymeleaf 模板)。

Maven 通过 <resources><webResources> 配置资源的路径、过滤规则输出位置,确保资源在构建过程中被正确处理(如变量替换、目录映射)。

普通资源文件过滤(非 Web 项目)

资源过滤(Filtering)是 Maven 的核心功能,用于将资源文件中的 ${属性名} 替换为 Maven 属性值(如自定义属性、环境变量)。

基本配置

pom.xml<build> 中配置 <resources>,指定需要过滤的资源目录和规则:

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
<build>
<resources>
<!-- 主资源配置 -->
<resource>
<directory>src/main/resources</directory> <!-- 资源文件所在目录 -->
<filtering>true</filtering> <!-- 启用过滤(替换变量) -->
<includes> <!-- 仅处理以下文件 -->
<include>**/*.properties</include> <!-- 所有 .properties 文件 -->
<include>**/*.xml</include> <!-- 所有 .xml 文件 -->
</includes>
<excludes> <!-- 排除不需要处理的文件 -->
<exclude>**/*.txt</exclude> <!-- 不处理 .txt 文件 -->
</excludes>
<!-- 可选:指定输出目录(默认 target/classes) -->
<!-- <targetPath>BOOT-INF/classes</targetPath> -->
</resource>

<!-- 测试资源配置(类似主资源) -->
<resource>
<directory>src/test/resources</directory>
<filtering>true</filtering>
<includes>
<include>**/*.properties</include>
</includes>
</resource>
</resources>
</build>

变量替换示例

  1. 定义 Maven 属性

阅读全文 »

Maven 属性详解:掌握配置灵活性的核心

Maven 属性是提升构建配置灵活性的关键机制,它允许在 POM 文件中定义和引用变量,实现配置的复用与动态调整。Maven 提供了六类属性,涵盖内置变量、项目配置、自定义参数等场景。

内置属性(Built-in Properties)

Maven 预定义的基础属性,无需配置即可直接使用,主要用于访问项目核心路径和版本信息。

属性 含义
${basedir} 项目根目录(包含 pom.xml 的目录)
${version} 项目版本号(等价于 ${project.version}
${project.groupId} 项目的 groupId(组织标识)
${project.artifactId} 项目的 artifactId(项目标识)

POM 属性(Project Properties)

直接映射 pom.xml 中的配置,用于访问项目构建相关的路径和配置信息。

常用 POM 属性:

属性 含义 默认值
${project.build.sourceDirectory} 主源码目录 src/main/java
${project.build.testSourceDirectory} 测试源码目录 src/test/java
${project.build.directory} 构建输出根目录 target
${project.build.outputDirectory} 主代码编译输出目录 target/classes
${project.build.testOutputDirectory} 测试代码编译输出目录 target/test-classes
${project.build.finalName} 打包后的文件名 ${project.artifactId}-${project.version}

自定义属性(User-defined Properties)

用户在 pom.xml<properties> 标签中自定义的属性,用于统一管理版本号、路径等可复用的配置。

阅读全文 »

Maven 依赖版本管理:统一控制与高效维护

在多模块项目中,依赖版本的不一致是导致冲突和构建失败的常见原因。Maven 提供了 dependencyManagement 机制,通过集中式配置实现依赖版本的统一管理,确保项目中所有模块使用一致的依赖版本。

dependencyManagement 的核心作用

dependencyManagement 是 Maven 中用于集中管理依赖版本的标签,它的核心价值在于:

  1. 版本统一:所有模块使用相同的依赖版本,避免因版本差异导致的冲突(如类找不到、方法不兼容)。
  2. 简化配置:子模块引入依赖时无需指定版本,直接继承父项目的版本定义。
  3. 灵活管控:仅声明版本,不实际引入依赖,子模块可按需选择是否引入。

配置详解

版本属性化(properties

将版本号定义在 <properties> 中,便于集中修改和维护:

1
2
3
4
<properties>
<spring-boot.version>2.2.2.RELEASE</spring-boot.version>
<mysql.version>5.1.48</mysql.version>
</properties>

使用 ${属性名} 引用版本,例如:

1
<version>${spring-boot.version}</version>

导入外部依赖管理(import 范围)

对于 Spring Boot、Spring Cloud 等生态,可直接导入其提供的依赖管理 POM,避免手动声明每个组件的版本:

1
2
3
4
5
6
7
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope> <!-- 关键:导入外部POM中的依赖管理配置 -->
</dependency>

原理spring-boot-dependencies 内部已定义了所有 Spring Boot 组件的版本,导入后可直接使用这些组件而无需指定版本。

自定义依赖版本

对于项目特有的依赖(如数据库驱动、连接池),在 dependencyManagement 中声明其版本:

阅读全文 »