spring yml 配置事务_spring boot详解, 配置文件加载顺序, spring事务管理, spring定时任务...

2023-11-17

spring boot 简介

spring boot是为了简化spring的开发, 不需要进行大量的配置, 是由pivotal公司提供的全新框架

为什么使用spring boot

独立运行

简化配置

自动配置

无需xml配置

spring boot核心配置文件

application和bootstrap

application用于spring的自动化配置

bootstrap: 使用 Spring Cloud Config 配置中心时,这时需要在 bootstrap 配置文件中添加连接到配置中心的配置属性来加载外部配置中心的配置信息;

配置文件格式:

.properties和.yml

注: .yml 格式不支持 @PropertySource 注解导入配置

springboot 启动会扫描以下位置的application.properties或者application.yml文件作为Spring boot的默认配置文件

如果在不同的目录中存在多个配置文件,它的读取顺序是:

注: bootstrap配置文件是优先级最高的.

config/application.properties(项目根目录中config目录下)

config/application.yml

application.properties(项目根目录下)

application.yml

resources/config/application.properties(项目resources目录中config目录下)

resources/config/application.yml

resources/application.properties(项目的resources目录下)

resources/application.yml

优先级由高到底,高优先级的配置会覆盖低优先级的配置;

SpringBoot会从这四个位置全部加载主配置文件;互补配置;

我们还可以通过spring.config.location来改变默认的配置文件位置

开启spring boot特性

继承spring-boot-starter-parent项目

spring-boot-dependencies项目依赖

读取配置文件方式

@PropertySource + @Value

@Value

Environment

@Inject

private Enviroment env;

@ConfigurationProperties

@ConfigurationProperties(prefix = "db")

actuator(激励者,执行器)

添加依赖“compile ‘org.springframework.boot:spring-boot-starter-actuator’”

actuator默认只开启了health和info

http://localhost:9210/health

http://localhost:9210/info

可观察工程的信息

profile使用

spring.profiles.active=dev/qa/prod 选择不同的环境

@Profile("")放在实现类上可以让不同环境运行不同的代码(如发短信), 如用Redis和Amazon 实现两套SQS, 一套用于qa, 一套用于prod

springboot 日志控制

spring boot 中使用的日志技术为logback,和log4j的作者相同,性能要优于Log4j,spring-boot-starter-logging,不用显式添加, 因为被spring-boot-starter-web所依赖

使用时只用在配置文件中添加

logging.pattern.console=

logging.level.root=

并在资源文件下添加logback.xml

spring boot核心注解

SpringBootApplication注解

元注解(@Target, @Retention, @Documented, @Inherited),可以对注解进行注解的注解

@SpringBootConfigurtaion, 和Configuration注解功能一样

@ComponentScan

basePackages: 若没有指定则扫描当前注解所标的类所在的包及其子孙包

includeFilters 和 excludeFilters

@Enable***,导入配置类的常见方式有三种:

以Configuration结尾,EnableScheduling —> @Import(SchedulingConfiguration.class)

根据条件选择配置类,以ConfigurationSelector结尾,且实现了ImportSelector接口.

动态注册bean,以Registar结尾,且该类实现了ImportBeanDefinitionRegistar接口.用于表示在运行代码时,若用到了该配置类, 则系统会自动将其导入.

@EnableAutoConfiguration

@AutoConfigurationPackage, 用于导入并装配用户自定义的类,即自动扫描包中的类

@Import 用于导入并装配框架本身的类

spring boot starter简介

starter相当于是一个模块, 整合了模块所需的依赖. 使用者只需依赖相应功能的starter,无需做过多的配置或依赖, springboot就能自动扫描并加载相应的模块.

如对spring web(spring mvc)的使用:spring-boot-starter-web

手写starter流程

以新建一个es-starter为例

新建一个gradle/maven项目

创建ElasticSearchProperties @ConfigurationProperties(prefix = "sxw.elasticsearch")

public class ElasticSearchProperties {

private String clusterName = "elasticsearch";

private String clusterNodes = "127.0.0.1:9300";

private String userName = "elastic";

private String password = "changeme";

// get/set

}

创建配置类 @Configuration

@EnableConfigurationProperties(ElasticSearchProperties.class)

public class ElasticSearchAutoConfiguration {

// 根据ElasticSearchProperties中的属性, 创建ES client

}

新建spring.factories文件,指定Starter的自动装配类,spring.factories文件位于resources/META-INF目录下

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\

cn.sxw.commons.data.es.starter.ElasticSearchAutoConfiguration

ApplicationRunner 和 CommandLineRunner

CommandLineRunner和ApplicationRunner接口的run()方法在SpringApplication完成启动时执行。启动完成之后,应用开始运行. CommandLineRunner和ApplicationRunner的作用是在程序开始运行前执行任务或记录信息.

spring boot 事务管理原理

在application启动类上添加EnableTransactionManagement注解

在事务方法上添加@Transactional(rollbackFor = Exception.class)

springboot的事务管理是通过autoconfigure来决定的.

如jpa, 是通过引入的HibernateJpaAutoConfiguration来实现的, HibernateJpaAutoConfiguration也是一个spring boot starter.

Spring 事务管理的核心接口是PlatformTransactionManager, 这个接口有几个常使用的实现策略: HibernateTransactionManager, DataSourceTransactionManager, JpaTransactionManager等.

PlatformTransactionManager中定义了3个方法:

根据TransactionDefinition 中定义的事务传播机制(propagation), 事务隔离级别(isolation), 事务超时时间(timeout), 是否是只读事务(is read only)来获取一个事务

TransactionStatus getTransaction(TransactionDefinition definition)

提交事务

void commit(TransactionStatus status)

回滚事务

void rollback(TransactionStatus status)

springboot @Transactional注解

让checked例外也回滚:在整个方法前加上 @Transactional(rollbackFor=Exception.class)

让unchecked例外不回滚: @Transactional(notRollbackFor=RunTimeException.class)

不需要事务管理的(只查询的)方法:@Transactional(propagation=Propagation.NOT_SUPPORTED)

事务传播机制(注: 方法存在于一个事务中是指存在方法调用)

REQUIRED: 业务方法需要在一个容器里运行。如果方法运行时,已经处在一个事务中,那么加入到这个事务,否则自己新建一个新的事务

NOT_SUPPORTED: 声明方法不需要事务。如果方法没有关联到一个事务,容器不会为他开启事务,如果方法在一个事务中被调用,该事务会被挂起,调用结束后,原先的事务会恢复执行

REQUIRESNEW: 不管是否存在事务,该方法总汇为自己发起一个新的事务。如果方法已经运行在一个事务中,则原有事务挂起,新的事务被创建

MANDATORY: 该方法只能在一个已经存在的事务中执行,业务方法不能发起自己的事务。如果在没有事务的环境下被调用,容器抛出异常

SUPPORTS: 该方法在某个事务范围内被调用,则方法成为该事务的一部分。如果方法在该事务范围外被调用,该方法就在没有事务的环境下执行

NEVER: 该方法绝对不能在事务范围内执行。如果在就抛异常。只有该方法没有关联到任何事务,才正常执行

NESTED: 如果一个活动的事务存在,则运行在一个嵌套的事务中。如果没有活动事务,则按REQUIRED属性执行。它使用了一个单独的事务,这个事务拥有多个可以回滚的保存点。内部事务的回滚不会对外部事务造成影响。它只对DataSourceTransactionManager事务管理器起效

spring boot @Schedule注解

fixedDelay: 上一次执行结束与下一次执行开始间隔的时间

fixedRate: 上一次执行与下一次执行间隔的时间

initialDelay: 第一次执行需要等待的时间

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

spring yml 配置事务_spring boot详解, 配置文件加载顺序, spring事务管理, spring定时任务... 的相关文章

  • 台式计算机的配置怎么看,台式电脑配置怎么看

    电脑的性能 价格决定于电脑的配置 很多人电脑新手在购买电脑的时候对电脑配置的相关情况不太了解 导致新买的电脑频频出问题 所以了解自己电脑配置是很重要的 这里我们就简单的来说说台式电脑配置怎么看 电脑配置一般CPU 显卡 主板 内存 硬盘 显
  • lambda表达式二之Stream流

    Stream流 是数据渠道 用于操作数据源 集合 数组等 所生成的元素序列 集合讲的是数据 流讲的是计算 Stream自己不会存储元素 Stream不会改变源对象 会返回一个持有结果的新Stream Stream操作是延迟执行的 意味着会等
  • LeetCode312. 戳气球 (分治,记忆化搜索,动态规划)

    LeetCode312 戳气球 解题思路 记忆化搜索 动态规划 解题思路 官方题解 参考题解 核心思想 由于戳气球的操作会导致两个气球从不相邻变成相邻 使得后续操作难以处理 于是我们倒过来看这些操作 将全过程看成每次添加一个气球 solve
  • CMake入门实践(一) 什么是cmake

    一 CMake简介 CMake是一个跨平台的安装 编译 工具 可以用简单的语句来描述所有平台的安装 编译过程 他能够输出各种各样的makefile或者project文件 能测试编译器所支持的C 特性 类似UNIX下的automake 只是
  • mac AE 快捷键

    项目窗口 新项目 Ctrl Alt N 打开项目 Ctrl O 打开项目时只打开项目窗口 按住Shift键 打开上次打开的项目 Ctrl Alt Shift P 保存项目 Ctrl S 选择上一子项 上箭头 选择下一子项 下箭头 打开选择的
  • Flink + Hudi 实现多流拼接(大宽表)

    1 背景 经典场景 Flink 侧实现 业务侧通常会基于实时计算引擎在流上做多个数据源的 JOIN 产出这个宽表 但这种解决方案在实践中面临较多挑战 主要可分为以下两种情况 维表 JOIN 场景挑战 指标数据与维度数据进行关联 其中维度数据
  • .net 配置网关(使用Ocelot)

    本文演示一个最简单的demo 来模拟如何通过网关来访问服务 而不是直接访问服务 创建三个asp net core web api项目 一个作为网关 两个作为服务 分别配置项目的访问路径 网关的项目使用https localhost 5001
  • MQTT-java使用说明

    MQTT java使用说明 本文的资料下载 链接 https pan baidu com s 1OCfsQ NqcehKy86kYkA wg pwd 1234 提取码 1234 MQTT基本介绍 MQTT是一个客户端服务端架构的发布 订阅模
  • DNS在架构设计中的巧用

    DNS在架构设计中的巧用 一 缘起 一个http请求从客户端到服务端 整个执行流程是怎么样的呢 一个典型流程如上 1 客户端通过域名daojia com请求dns server 2 dns server返回域名对应的外网ip 1 2 3 4
  • python拟合二次函数_Python 最小二乘法 拟合 二次曲线

    最小二乘 Python 二次拟合 随机生成数据 并且加上噪声干扰 构造需要拟合的函数形式 使用最小二乘法进行拟合 输出拟合后的参数 将拟合后的函数与原始数据绘图后进行对比 import numpy as np import matplotl
  • 讯飞aiui的webapi+python使用记录

    1 demo一直不能出语义理解 我以为是我的问题 直到 当前页面配置修改仅在测试环境生效 设备端体验需要SDK传参时在情景模式后加 box 或 更新发布 至生产环境体验 这不坑爹吗 记得在情景模式后加 box
  • BFS的常见算法题-二叉树的最小深度

    背景 对某个二叉树 我们除了用肉眼可以看出其深度 还可以用算法来计算出它的深度 比如 下面的二叉树 一共有三层 它的深度就是3 如果某个分支的叶子结点没有左右子节点 就是它深度中较小的一个 leetcode中 有一题求最小深度 如下图 最小
  • 各种日志关系

    slf4j是日志的门面 也是会说是日志框架
  • 【Unity开发】Unity获取设备屏幕分辨率

    using UnityEngine using System Collections public class ExampleClass MonoBehaviour void Start Resolution resolutions Scr
  • Vscode ssh远程连接失败解决办法

    问题描述 Vscode 通过remote ssh连接远程ubuntu时出现 192 168 x x has fingerprint SHA256 如下图所示 按照提示选择 continue 然后输入正确密码却显示Permission Den
  • java md5 解密_“实用”的JAVA开发工具类库

    简介 Hutool是一个小而全的Java工具类库 通过静态方法封装 降低相关API的学习成本 提高工作效率 使Java拥有函数式语言般的优雅 让Java语言也可以 甜甜的 Hutool中的工具方法来自于每个用户的精雕细琢 它涵盖了Java开
  • 免费的 AI 代码辅助工具-codeium

    不是标题党 是真免费 几天之前 GitHub 发布了 GitHub Copilot X 这是一款基于 OpenAI 的 GPT 4 模型开发的 AI 代码辅助工具 看介绍应该是和 Microsoft 365 Copilot 很像的产物 属于
  • ChatGLM-6B部署笔记

    前言 本笔记基于ChatGLM 6B开源网站 https github com THUDM ChatGLM 6B 完成ChatGLM的本地部署 首先电脑已经安装python3 10 anaconda pycharm2022 3 如若使用本地
  • Application.targetFrameRate安卓apk上设置帧率问题

    一般游戏为了更好的适配各种机型 会对游戏进行锁帧 就会使用Application targetFrameRate这个方法设置帧率 pc上测试是没问题的 但是安卓机上面测试就会发现 设置的帧率只能在30和60帧两个数值来回跳动 参考了unit

随机推荐

  • 21-angular.merge

    通过从src对象 s 复制自己的可枚举属性到dst 深度扩展了目标对象的dst 您可以指定多个src对象 如果您想保留原始对象 那么可以通过将空对象作为目标来实现 var object angular merge object1 objec
  • 睿智的seq2seq模型1——利用seq2seq模型对数字进行排列

    睿智的seq2seq模型1 利用seq2seq模型对数字进行排列 学习前言 seq2seq简要介绍 利用seq2seq实现数组排序 实现方式 一 对输入格式输出格式进行定义 二 建立神经网络 1 神经网络的输入 2 语义编码c的处理 3 输
  • 【English】十大词性之感叹词(感叹句)

    感叹词 文章目录 感叹词 前言 一 十大高频感叹词 1 1 Oh 表示惊讶 指责 痛苦 称赞 懊恼等 可译为 哦 哎呀 噢 啊 呀 等 1 2 Ah 表示惊奇 高兴 讨厌 懊悔 藐视 威胁等 可译为 呀 啊 等 1 3 come 表示鼓励
  • 海量数据分类 liblinear使用总结

    liblinear使用总结 liblinear是libsvm的线性核的改进版本 专门适用于百万数据量的分类 正好适用于我这次数据挖掘的实验 liblinear用法和libsvm很相似 我是用的是 exe文件 利用python的subproc
  • Oracle安装详细教程

    一 安装教程 安装教程1 安装教程2 假设安装时弹出 microsoft net framework 3 5 提示你需要安装这个 你可以选择直接忽视 关掉弹窗 等待数据库复制 安装时 综合看两个教程 基本满足安装需求 二 安装测试 1 在电
  • Mac os Ventura 关闭 accent方言,长按不能连续输入问题

    Mac os Ventura 关闭 accent方言 长按不能连续输入问题 在之前的osx版本遇到长按开启方言输入 无法连续输入问题时 defaults write g ApplePressAndHoldEnabled bool false
  • Python逻辑判断顺序

    Python逻辑判断是有顺序的 如 while l1 is not None and l2 is not None and l1 val lt l2 val node1 next l1 node1 node1 next l1 l1 next
  • 从零开始,教你如何开发一款自己的 IDEA 插件!

    程序员的成长之路 互联网 程序员 技术 资料共享 关注 阅读本文大概需要 4 分钟 来自 blog csdn net smile 795 article details 125470136 idea插件介绍 作为一枚程序员 平时最常用的id
  • cdn服务器pnk_cdn服务器是什么

    对于cdn我们不陌生 你听过cdn服务器吗 CDN服务器是建立在网络上的内容分发网络 依托布置在各地的边缘服务器 用户可以经过中央渠道的负载平衡 内容分发 调度等功用模块获取附近所需的内容 然后减少网络拥塞 进步用户拜访响应速度和命中率 为
  • 数据结构与算法——线性表的顺序储存结构

    目录 前言 一 顺序储存的定义及储存方式 二 地址计算方法 三 顺序存储结构的插入和删除 3 1 获得元素操作 3 2 插入操作 3 3 删除操作 四 分析插入和删除操作的时间复杂度 五 线性表顺序存储结构的优缺点 前言 在介绍线性表的顺序
  • Windows安装程序遇到错误:0x80240037

    在安装微软的程序时遇到此错误 本例以安装PB的帮助文档为例 解决办法是 第一步 更改安装文件后缀 第二步 Win R执行 第一步 将msu后缀更改为cab 更改后变为 然后将其解压到一个新文件夹 比如cab 解压后的内容为 第二步 WIN
  • Linux与Windows下CMake的安装与编译

    一 背景介绍 CMake 这个名字是 Cross platform Make 的缩写 虽然名字中含有 make 但是CMake和Unix上常见的 make 系统是分开的 而且更为高端 它可与原生建置环境结合使用 例如 make 苹果的Xco
  • GPS开发常用方法 和用Criteria确定android location providerGPS开发常用方法

    GPS常用方法总结 取得LocationProvider Java代码 public void getLocationProvider try Criteria mCriteria01 new Criteria mCriteria01 se
  • 利用Visual Studio程序写出循环结构求1+3+5+....+100的值

    下面是在 Visual Studio 中使用 C 编写循环结构求 1 3 5 100 的值的示例代码 int sum 0 for int i 1 i lt 100 i 2 sum i Console WriteLine sum 上面的代码使
  • Excel里怎么冻结某一行某一列

    企业内部日常运营中 需要不断的处理数据来为决策做支撑 但是如果数据大的话 会发现看不到表头那边 不知道这些数据属于哪个地方 下面小编就告诉大家如何在Excel里来冻结窗口固定表头 以下就是Excel里冻结首行首列已经冻结多个窗口的方法 Ex
  • 《程序员的自我修养——链接、装载与库》

    先不说别的 就单看书名就知道是什么意思了 作者的意思是想 演员的自我修养 的作者 斯坦尼斯拉夫斯基 致敬 老斯的那本书我没看过 但我看这本书的意思就是培养程序员的基本素质 你说啥叫基本素质 那就是你能够了解你编写的程序的任何一个运行的细节
  • c++可变参数完美转发

    c 语法真的怪异 看线程源码的时候看到一段 template
  • 基于51单片机可控电压0-5V输出PWM方式PID稳压

    视频地址链接 https www bilibili com video BV17V411n72P 本设计为AT89C51为主控芯片 主要是实现了PWM方式输出可调电压0 5V输出 使用PID方式稳压
  • c51单片机中断详解--适合初学者

    代码文本在文末 文中为代码截图 工程图 第一题 每次亮一个灯的流水灯 定义P1为led1 外部中断0允许中断 EX0 1 下降沿触发 IT0 1 总开关 EA 1 中断要执行的是P0引脚的4个二极管闪六次 其实这里还有个想说的是 IE在中断
  • spring yml 配置事务_spring boot详解, 配置文件加载顺序, spring事务管理, spring定时任务...

    spring boot 简介 spring boot是为了简化spring的开发 不需要进行大量的配置 是由pivotal公司提供的全新框架 为什么使用spring boot 独立运行 简化配置 自动配置 无需xml配置 spring bo