1.jpa想要输出参数
logging:
level:
org.hibernate.orm.jdbc.bind: trace #打印SQL参数
web: debug #web框架的日志级别
就可以了,
2.Slf4j
其实 Slf4j 是一个日志接口规范,没有具体的实现
而 logback 是 Slf4j的一个实现 ,也是springboot3 的默认实现,
一个项目最好只有一个 Slf4j的实现,要不然可能会有冲突, 他会扫描类路径下是否有实现,然后找到后使用。
springboot3还可以切换 log4j2 的实现, 本来 log4j2 的接口与 Slf4j不同 ,但是springboot -log4j2-starter 使用了适配器模式,适配了SLF所以 可以无缝衔接 slf ,但是要排除原来自带的 springboot-logging-starter 的依赖, 来保证只有一个SLF实现
log4j2的配置文件
log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN"> <!--log4j2内部的日志输出级别,跟你的项目无关-->
<Appenders>
<!-- 控制台输出 -->
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
<!-- 滚动文件输出 -->
<RollingFile name="RollingFile" fileName="logs/application.log"
filePattern="logs/application-%d{yyyy-MM-dd}-%i.log.gz">
<PatternLayout>
<pattern>%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %msg%n</pattern>
</PatternLayout>
<Policies>
<!-- 时间滚动策略:每天滚动一次 -->
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
<!-- 文件大小滚动策略:当文件达到 10MB 时滚动 -->
<SizeBasedTriggeringPolicy size="10MB"/>
</Policies>
<!-- 保留的日志文件数量 -->
<DefaultRolloverStrategy max="10"/>
</RollingFile>
</Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="Console"/>
<AppenderRef ref="RollingFile"/>
</Root>
<Logger name="com.yourpackage" level="debug" additivity="false">
<AppenderRef ref="Console"/>
<AppenderRef ref="RollingFile"/>
</Logger>
</Loggers>
</Configuration>
logging:
level:
root: info
com.yourpackage: debug
config: classpath:log4j2.xml
所有的子日志 都是继承 root 日志的
3.不同依赖范围的行为
范围 | 编译时可用 | 测试时可用 | 运行时可用 | 打包到构建产物 | 传递性 |
---|---|---|---|---|---|
compile | 是 | 是 | 是 | 是 | 是 |
provided | 是 | 是 | 否 | 否 | 否 |
runtime | 否 | 是 | 是 | 是 | 是 |
test | 否 | 是 | 否 | 否 | 否 |
system | 是 | 是 | 是 | 否 | 否 |
import | 否 | 否 | 否 | 否 | 是 |
具体解释
-
compile
- 编译时可用:在编译项目时可用。
- 测试时可用:在运行测试时可用。
- 运行时可用:在项目运行时可用。
- 打包到构建产物:会被包含在最终的构建产物(如 JAR 或 WAR 文件)中。
- 传递性:会被传递给依赖当前项目的其他模块。
-
provided
- 编译时可用:在编译项目时可用。
- 测试时可用:在运行测试时可用。
- 运行时可用:在项目运行时不可用,因为这些依赖由运行环境提供。
- 打包到构建产物:不会被包含在最终的构建产物中。
- 传递性:不会被传递给依赖当前项目的其他模块。
-
runtime
- 编译时可用:在编译项目时不可用。
- 测试时可用:在运行测试时可用。
- 运行时可用:在项目运行时可用。
- 打包到构建产物:会被包含在最终的构建产物中。
- 传递性:会被传递给依赖当前项目的其他模块。
-
test
- 编译时可用:在编译项目时不可用。
- 测试时可用:在运行测试时可用。
- 运行时可用:在项目运行时不可用。
- 打包到构建产物:不会被包含在最终的构建产物中。
- 传递性:不会被传递给依赖当前项目的其他模块。
-
system
- 编译时可用:在编译项目时可用。
- 测试时可用:在运行测试时可用。
- 运行时可用:在项目运行时可用。
- 打包到构建产物:不会被包含在最终的构建产物中。
- 传递性:不会被传递给依赖当前项目的其他模块。
- 特殊性:需要通过
<systemPath>
指定依赖的路径,通常是项目目录中的 JAR 文件。
-
import
- 编译时可用:在编译项目时不可用。
- 测试时可用:在运行测试时不可用。
- 运行时可用:在项目运行时不可用。
- 打包到构建产物:不会被包含在最终的构建产物中。
- 传递性:会被传递给依赖当前项目的其他模块。
- 特殊性:主要用于
pom
类型的依赖,用于导入其他pom
文件中的依赖管理信息,常用于 BOM(Bill of Materials)文件。
option 与 provided 的区别 就是 语义化
option: 在当前项目使用,其他依赖引入的时候,必须显示声明才能使用,它依赖了这个依赖的内容
provided:是根本就不传递, 有另一个容器去提供此依赖的内容
4. SQL json
将数据库 的json 字段 转化成 想要的格式 ,因为实体类改了
UPDATE enum_dictionary
SET enum_params = (
SELECT JSON_OBJECTAGG(
k,
JSON_OBJECT('defaultValue', JSON_EXTRACT(enum_params, CONCAT('$."', k, '"')))
)
FROM JSON_TABLE(
JSON_KEYS(enum_params),
'$[*]' COLUMNS (k VARCHAR(255) PATH '$')
) AS jt
);