当前位置: 首页 > news >正文

SpringBoot事务-调度-缓存

一.Spring Boot中的事务管理

设置事务

        @Transactional(isolation = Isolation.DEFAULT)

        @Transactional(propagation = Propagation.REQUIRED)

开启事务

        @EnableTransactionManagement

1. 开启事务管理

要开启 Spring 的事务管理,你需要在你的 Spring Boot 应用中添加 @EnableTransactionManagement 注解。通常这个注解会放在你的主应用类或者配置类上。

@SpringBootApplication
@EnableTransactionManagement
public class Springboot01CenterTxApplication {public static void main(String[] args) {SpringApplication.run(Springboot01CenterTxApplication.class, args);}}

2. 使用事务注解

  • @Transactional 注解可以加在服务类的方法上,表示该方法是一个事务。这个注解可以接收多个参数来控制事务的行为,比如 isolation 和 propagation
@Transactional
@Service
public class CustomerServiceImp implements ICustomerService{@Resourceprivate ConsumeMapper mapper;@Overridepublic void batchAdd() {mapper.insert(new Customer(1,"台湾君越酒店","五星级","佩洛西1","12345678"));int a = 10/0;mapper.insert(new Customer(2,"台湾君越酒店","五星级","佩洛西1","12345678"));mapper.insert(new Customer(3,"台湾君越酒店","五星级","佩洛西1","12345678"));}
}

3. 事务属性

  • Isolation:定义多个事务之间的隔离级别,主要有以下几个选择:
    • Isolation.DEFAULT:使用数据库默认的隔离级别。
    • Isolation.READ_UNCOMMITTED:允许读取未提交的数据。
    • Isolation.READ_COMMITTED:确保只读取已提交的数据。
    • Isolation.REPEATABLE_READ:确保在同一事务中多次读取的数据一致。
    • Isolation.SERIALIZABLE:完全隔离的事务,确保每个事务都按照某个顺序执行(性能较低)。
  • Propagation:定义事务的传播行为,主要有以下几种:
    • Propagation.REQUIRED:如果当前存在事务,则加入该事务;如果没有事务,则创建新的事务。
    • Propagation.REQUIRES_NEW:创建一个新的事务,如果当前存在事务,则将当前事务挂起。
    • Propagation.NESTED:如果当前存在事务,则在嵌套事务中执行;否则,就执行与 REQUIRED 相同的方式。
    • Propagation.SUPPORTS:如果当前存在事务,则加入该事务;否则以非事务方式执行。
    • Propagation.NOT_SUPPORTED:以非事务方式执行,挂起当前事务(如果存在)。
    • Propagation.NEVER: 不支持事务,如果当前存在事务则会抛出异常。

 4. 测试事务

你可以创建测试用例,验证事务的正确性。例如,如果在一个事务中执行了多个数据库操作,而其中一个操作失败,则整个事务应回滚,数据库应保持在失败前的状态。

public void batchAdd() {mapper.insert(new Customer(1,"台湾君越酒店","五星级","佩洛西1","12345678"));// int a = 10/0;mapper.insert(new Customer(2,"台湾君越酒店","五星级","佩洛西1","12345678"));mapper.insert(new Customer(3,"台湾君越酒店","五星级","佩洛西1","12345678"));}

public void batchAdd() {mapper.insert(new Customer(1,"台湾君越酒店","五星级","佩洛西1","12345678"));int a = 10/0;mapper.insert(new Customer(2,"台湾君越酒店","五星级","佩洛西1","12345678"));mapper.insert(new Customer(3,"台湾君越酒店","五星级","佩洛西1","12345678"));}

二.Spring Boot异步任务

在项目开发中,绝大多数情况下都是通过同步方式处理业务逻辑的,但是比如批量处理数据,批量发送 邮件,批量发送短信等操作 容易造成阻塞的情况,之前大部分都是使用多线程来完成此类任务而在 Spring 3+之后,就已经内置了@Async注解来完美解决这个问题,从而提高效率。

使用的注解

        @EnableAsync 启动类上开启基于注解的异步任务

        @Async 标识的方法会异步执行

1. 启用异步支持

在你的主应用类或配置类上添加 @EnableAsync 注解。这样 Spring 就会扫描带有 @Async 注解的方法并在异步执行它们。

@SpringBootApplication
@EnableAsync
public class Springboot02CenterAysncApplication {public static void main(String[] args) {SpringApplication.run(Springboot02CenterAysncApplication.class, args);}}

2. 创建异步方法

在你的服务类中,可以通过 @Async 注解来标记要异步执行的方法。这个方法应该返回 void 或者是 FutureCompletableFuture 等可用于异步结果的类型。

@Service
public class CustomerServiceImp implements ICustomerService{@Override@Asyncpublic void batchAdd() {try {Thread.sleep(3000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("======>批量新增");}
}

3. 调用异步方法

在其他服务或控制器中,可以调用上述异步方法。注意,由于这些方法是异步执行的,所以调用这些方法后不会等待其完成,调用者会立即继续执行后面的代码。

@RestController
public class CustomrControllerImp {@Autowiredprivate ICustomerService service;@RequestMapping("/add")public String batchAdd() {service.batchAdd();return "成功";}}

总结

通过 @EnableAsync 和 @Async 注解,Spring 允许你轻松地将方法异步执行,从而提高应用的吞吐量和响应速度。同时,自定义配置线程池也可以使你更好地控制异步任务的执行。使用异步任务时要注意,异步方法不能被同一类中的其他方法直接调用,因为那样不会触发代理,方法会在同一线程中执行。

三.SpringBoot定时任务调度

SpringTask

在项目开发中,经常需要执行一些定时任务,比如 每月1号凌晨需要汇总上个月的数据分析报表; 每天 凌晨分析前一天的日志信息等定时操作。Spring 为我们提供了异步执行定时任务调度的方式

 使用的注解

@EnableScheduling启动类上开启基于注解的定时任务

@Scheduled标识的方法会进行定时处理

        需要通过 cron 属性来指定 cron 表达式:秒 分 时 日 月 星期 年

        在线生成cron表达式 http://cron.qqe2.com/

1. 启用定时任务

在你的主应用类或配置类上添加 @EnableScheduling 注解,以启用 Spring 的定时任务功能。

@SpringBootApplication
@EnableScheduling
public class Springboot03CenterJobApplication {public static void main(String[] args) {SpringApplication.run(Springboot03CenterJobApplication.class, args);}}

2. 创建定时任务

在你的服务类中,可以使用 @Scheduled 注解来标识需要定时执行的方法。可以通过 cron 属性来指定 cron 表达式。

@Service  
public class MyScheduledService {  // 每分钟执行一次  @Scheduled(cron = "0 * * * * ?")  public void executeTaskEveryMinute() {  System.out.println("Executing task every minute: " + System.currentTimeMillis());  }  // 每天凌晨 1 点执行  @Scheduled(cron = "0 0 1 * * ?")  public void executeTaskAtOneAM() {  System.out.println("Executing task at 1 AM: " + System.currentTimeMillis());  }  // 每周一执行  @Scheduled(cron = "0 0 12 ? * MON")  public void executeTaskEveryMonday() {  System.out.println("Executing task every Monday at noon: " + System.currentTimeMillis());  }  
}  

3. 使用 cron 表达式

cron 表达式的格式如下:

秒  分  时  日  月  星期  年(可选)

  • :0-59
  • :0-59
  • :0-23
  • :1-31
  • :1-12 或者 JAN-DEC
  • 星期:1-7(1=星期日)或 SUN-SAT
  • :1970-2099(可选)
示例 cron 表达式
  • "0 * * * * ?":每分钟执行一次
  • "0 0 1 * * ?":每天凌晨 1 点执行
  • "0 0 12 ? * MON":每周一中午 12 点执行
  • "0 0/5 * * * ?":每 5 分钟执行一次

你可以使用在线工具生成和测试 cron 表达式,例如 在线Cron表达式生成器。

总结

通过 @EnableScheduling 和 @Scheduled 注解,Spring 提供了一种简单而强大的方式来实现定时任务。你可以根据需要自定义 cron 表达式,以满足不同的调度需求。

四.SpringBoot 整合Mail

第一步添加坐标

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId>
</dependency>

第二步开启配置

配置邮箱信息

        spring.mail.username=

        spring.mail.password=

发送邮件服务器

        spring.mail.host=smtp.qq.com

spring.mail.username=3058389349
spring.mail.password=topqjgemcudxdfch
spring.mail.host=smtp.qq.com
spring.mail.properties.smtp.ssl.enable=true

 第三步编写代码

邮件收发核心类

         JavaMailSenderImpl javaMailSender;

封装简单的邮件内容

        SimpleMailMessage

封装复杂的邮件(携带附件)

         MimeMessage MimeMessageHelper

@SpringBootTest
class Springboot04CenterMailApplicationTests {@Autowired(required = false)private JavaMailSenderImpl javaMailSender;//发送简单邮件@Testvoid show1() {//1.创建邮件对象SimpleMailMessage simpleMailMessage=new SimpleMailMessage();//2.设置信息simpleMailMessage.setSubject("疫情全面放开");simpleMailMessage.setText("2022年好难,做了11个月的核酸,结果在第12个月阳了~~~");simpleMailMessage.setFrom("3058389349@qq.com");simpleMailMessage.setTo("3418813089@qq.com");//3.发送邮件javaMailSender.send(simpleMailMessage);System.out.println("发送成功!!!");}//发送复杂邮件@Testvoid show2() throws MessagingException {//1.创建邮件对象MimeMessage mimeMessage = javaMailSender.createMimeMessage();//2.创建MimeMessageHelperMimeMessageHelper mimeMessageHelper=new MimeMessageHelper(mimeMessage,true);//3.设置信息mimeMessageHelper.setSubject("程序员的误解");mimeMessageHelper.setText("程序员是个<span style='color:red'>高薪,高危</span>的职业",true);mimeMessageHelper.addAttachment("pp.jpg",new File("D:\\1\\图片\\pp.jpg"));mimeMessageHelper.setFrom("3058389349@qq.com");mimeMessageHelper.setTo("3418813089@qq.com");//4.发送邮件javaMailSender.send(mimeMessage);}@Testpublic void show(){//1、new Jedis对象即可Jedis jedis=new Jedis("127.0.0.1",6379);//jedis所有的命令System.out.println(jedis.ping());}}

五.SpringBoot 整合redis

1、添加坐标

        <!-- redis依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter</artifactId><version>RELEASE</version><scope>test</scope></dependency>

2、配置Redis

spring.redis.host=localhost
spring.redis.port=6379

3、使用 Redis

//演示1(专用对象)@Autowiredpublic RedisTemplate redisTemplate;//演示2(专用字符串key value均是String)@Autowiredpublic StringRedisTemplate stringRedisTemplate;//演示3(自定义)@Autowiredpublic RedisTemplate jsonRedisTemplate;

4. 启动 Redis Server

5. 运行 Spring Boot 应用

StringRedisTemplate(专用字符串key value均是String)

    @Autowiredpublic StringRedisTemplate stringRedisTemplate;    
@Testpublic void stringRedisTemplate(){//1.key相关Set<String> keys = stringRedisTemplate.keys("*");for (String key : keys) {System.out.println(key);}//2.各种类型支持stringRedisTemplate.opsForValue();stringRedisTemplate.opsForList();//ListstringRedisTemplate.opsForHash();//hashstringRedisTemplate.opsForSet();//setstringRedisTemplate.opsForZSet();//zset//3.举例字符串stringRedisTemplate.opsForValue().set("name","水果");String name = stringRedisTemplate.opsForValue().get("name");System.out.println(name);//4.操作list列表stringRedisTemplate.opsForList().leftPush("myList","香蕉");stringRedisTemplate.opsForList().leftPush("myList","苹果");stringRedisTemplate.opsForList().leftPushAll("mylistAll","苹果","香蕉","香蕉");List<String> list =  stringRedisTemplate.opsForList().range("mylistAll",0,2);System.out.println(list);}

RedisTemplate(专用对象)

注意:
1.测试RedisTemplate与stringRedisTemplate存的数据相互独立
2.redisTemplate默认使用key序列化方式和value的序列化方式都使用的是jdk serializer序列化
  所以存对象会乱码

    @Autowiredpublic RedisTemplate redisTemplate;
@Testpublic void show2(){ValueOperations valueOperations = redisTemplate.opsForValue();valueOperations.set("name","蜜蜂");String name = (String) valueOperations.get("name");System.out.println(name);redisTemplate.opsForValue();//StringredisTemplate.opsForList();//ListredisTemplate.opsForHash();//hashredisTemplate.opsForSet();//setredisTemplate.opsForZSet();//zsetStudent stu1 = new Student(1,"蜜蜂","采蜜");redisTemplate.opsForValue().set("stu1",stu1);Student ss1 = (Student)redisTemplate.opsForValue().get("stu1");System.out.println(ss1);redisTemplate.opsForList().leftPushAll("mylist","睡觉","游戏");List<String> list = redisTemplate.opsForList().range("mylist",0,-1);for (int i = 0; i < list.size(); i++) {String s =  list.get(i);System.out.println(s);}System.out.println("打印默认序列策略"+redisTemplate.getDefaultSerializer());}

 jsonRedisTemplate(自定义) 

JsonRedisTemplate 是 Spring Data Redis 提供的一个模板类,专门用于操作 Redis 数据库并以 JSON 格式序列化和反序列化对象。

        添加坐标
<dependency>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-starter-data-redis</artifactId>  
</dependency>  
<dependency>  <groupId>com.fasterxml.jackson.core</groupId>  <artifactId>jackson-databind</artifactId>  
</dependency>  
        创建 JsonRedisTemplate Bean

然后,你可以创建一个 JsonRedisTemplate 的 Bean。通常,我们会通过 @Configuration 类来配置。

package com.xn.springboot_redis01.config;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;import java.net.UnknownHostException;@Configuration
public class RedisConfig {@Beanpublic RedisTemplate<Object, Object> jsonRedisTemplate(RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {//1.创建自定义模板类RedisTemplate<Object, Object> template = new RedisTemplate<Object, Object>();//配置json类型的序列化工具template.setKeySerializer(new StringRedisSerializer());//这样key会用字符串方式保存template.setDefaultSerializer(new Jackson2JsonRedisSerializer<Object>(Object.class));template.setConnectionFactory(redisConnectionFactory);return template;}}
         使用 JsonRedisTemplate
@Autowiredpublic RedisTemplate jsonRedisTemplate;@Testpublic void show3(){//保存对象Student stu = new Student(1,"彭老师","拉面");jsonRedisTemplate.opsForValue().set("stu",stu);//获取对象Object s1 = jsonRedisTemplate.opsForValue().get("stu");String jsonS1 = JSONObject.toJSONString(s1);Student s11 = JSONObject.parseObject(jsonS1,Student.class);System.out.println(s11);Student stu2 = new Student(2,"彭老师","拉面");Student stu1 = new Student(2,"彭老师","拉面");Student stu3 = new Student(2,"彭老师","拉面");List<Student> students = Arrays.asList(stu1, stu2, stu3);jsonRedisTemplate.opsForValue().set("stus",students);//必须Object接受,利用ObjectMapper对象转换,如果强制转换会报错Object data = jsonRedisTemplate.opsForValue().get("stus");String dataJson = JSONObject.toJSONString(data);//将JSON类型转为ListList<Student> stus = JSONObject.parseArray(dataJson, Student.class);System.out.println(stus);}

 

 

相关文章:

SpringBoot事务-调度-缓存

一.Spring Boot中的事务管理 设置事务 Transactional(isolation Isolation.DEFAULT) Transactional(propagation Propagation.REQUIRED) 开启事务 EnableTransactionManagement 1. 开启事务管理 要开启 Spring 的事务管理&#xff0c;你需要在你的 Spring Boot 应用中添加 …...

社交媒体分析:如何利用Facebook的数据提升业务决

在数字化时代&#xff0c;社交媒体已经成为企业战略中不可或缺的一部分。Facebook&#xff0c;作为全球最大的社交平台之一&#xff0c;提供了丰富的数据资源&#xff0c;这些数据不仅能够帮助企业了解市场趋势&#xff0c;还能提升业务决策的精准度。本文将探讨如何有效利用Fa…...

企业中的流程组织

在每个实施SAP的企业中&#xff0c;除了传统的IT部门(包括SAP顾问所在的部门)&#xff0c;必不可少的是一定形式的流程组织(Process Organization)&#xff0c;流程组织的主要作用有 梳理企业内部业务流程&#xff0c;根据企业发展需要变更企业内部流程确定企业流程规范和部门…...

Redis:查询是否包含某个字符/字符串之二

上一篇&#xff1a;Redis&#xff1a;查询是否包含某个字符/字符串之一-CSDN博客 下一篇&#xff1a;Redis&#xff1a;查询是否包含某个字符/字符串之三-CSDN博客 摘要&#xff1a; 要查询数据&#xff0c;就需要遍历key&#xff0c;遍历value&#xff0c;其中包含存储等辅助…...

算法笔记|Day23贪心算法

算法笔记|Day23贪心算法 ☆☆☆☆☆leetcode 455.分发饼干题目分析代码 ☆☆☆☆☆leetcode 376. 摆动序列题目分析代码 ☆☆☆☆☆leetcode 53. 最大子序和题目分析代码 ☆☆☆☆☆leetcode 455.分发饼干 题目链接&#xff1a;leetcode 455.分发饼干 题目分析 优先考虑饼干…...

[星瞳科技]OpenMV使用时有哪些常见错误和解决办法?

常见代码错误 ImportError:no module named xxx 这个错误是Import错误&#xff0c;没有stepper这个模块。 原因&#xff1a; 你没有把stepper.py这个文件拖到你的板子里。见&#xff1a;模块的使用 拖过去之后&#xff0c;需要重启&#xff0c;使模块生效 MemoryError:FB …...

深度学习入门(二):PyTorch使用-张量的类型转换,拼接操作,索引操作,形状操作

目录 1. 张量类型转换 1.1 张量转换为 numpy 数组 1.2 numpy 转换为张量 1.3 标量张量和数字的转换 1.4 小节 2. 张量拼接操作 2.1 torch.cat 函数的使用 2.2 torch.stack 函数的使用 2.3 小节 3. 张量索引操作 3.1 简单行、列索引 3.2 列表索引 3.3 范围索引 3.…...

使用C#禁止Windows系统插入U盘(除鼠标键盘以外的USB设备)

试用网上成品的禁用U盘的相关软件&#xff0c;发现使用固态硬盘改装的U盘以及手机等设备&#xff0c;无法被禁止&#xff0c;无奈下&#xff0c;自己使用C#手搓了一个。 基本逻辑&#xff1a; 开机自启&#xff1b;启动时&#xff0c;修改注册表&#xff0c;禁止系统插入USB存…...

18. 基于ES实战海量数据检索

18. 基于ES实战海量数据检索 一. 概述二. Elasticsearch 全文检索1. 分布式搜索引擎2. 搜索引擎种类3. 倒排索引三. elastic使用1. 官网介绍2. docker安装3. elasticsearch-head工具4. 分词与内置分词4.1 内置分词器(了解即可)4.2 `IK`中文分词器三. 整合SpringCloud1. 基础配置…...

SpringBoot和Redis的交互数据操作以及Redis的持久化/删除策略和缓存问题

目录 一、SpringBoot和Redis/MySQL的数据交互 二、Redis的持久化 1、持久化过程保存什么 2、RDB方式 &#xff08;1&#xff09;RDB手动 &#xff08;2&#xff09;RDB自动 &#xff08;3&#xff09;RDB的优点 &#xff08;4&#xff09;RDB缺点 3、AOF方式 &#…...

Butterworth filter的运行原理

想象一下&#xff0c;你正在录制一个舞蹈表演的视频&#xff0c;但在录制过程中&#xff0c;摄像机由于风的影响稍微晃动了一下。现在&#xff0c;录像中的舞者看起来不再那么流畅&#xff0c;动作变得有点颤抖。你希望能让舞者的动作重新看起来平滑和优雅&#xff0c;这时你就…...

掌握SQL的威力:批量更新与删除的艺术

标题&#xff1a;掌握SQL的威力&#xff1a;批量更新与删除的艺术 在数据库管理中&#xff0c;批量更新&#xff08;UPDATE&#xff09;和删除&#xff08;DELETE&#xff09;操作是常见的需求&#xff0c;特别是在处理大量数据时。SQL作为数据库查询和操作的标准语言&#xf…...

《新一代数据可视化分析工具应用指南》正式开放下载

2024年8月12日&#xff0c;由DataEase开源项目组编写的《新一代数据可视化分析工具应用指南》白皮书正式面向广大用户开放下载。 《新一代数据可视化分析工具应用指南》是DataEase开源项目组为了支持企业落地并推广BI工具、推进企业数据可视化建设而编著的指导手册。通过本白皮…...

数据结构与算法——BFS(广度优先搜索)

算法介绍&#xff1a; 广度优先搜索&#xff08;Breadth-First Search&#xff0c;简称BFS&#xff09;是一种遍历或搜索树和图的算法&#xff0c;也称为宽度优先搜索&#xff0c;BFS算法从图的某个节点开始&#xff0c;依次对其所有相邻节点进行探索和遍历&#xff0c;然后再…...

登录 k8s-Dashboard 显示 Your connection is not private

文章目录 一、背景二、解决方案 一、背景 部署好 kubernetes-Dashboard 后使用 master节点的 ipport 登录 Dashboard 显示 Your connection is not private 无论是 Edge 还是 Google Chrome 都是这样的情况 二、解决方案 点击网页空白处&#xff0c;英文输入法输入&#xf…...

【Bifrost】ubuntu24.04 远程构建及clion设置编码风格google

Bifrost 构建通过clion 远程到ubuntu24.04 构建感觉是不认识这种写法,这种至少是c++11 fix : 修改absl 的构建cmakelist,明确c++17 好像还是不行error: ‘uint8_t’ was not declared in this scope加入:#include <stdint.h>可以解决一部分。那么,这种呢?/home/zha…...

批量查询全国快递单号:高效追踪物流信息

在日常生活和工作中&#xff0c;我们经常会遇到需要查询多个快递单号物流信息的情况。如果手动逐一查询&#xff0c;不仅效率低下&#xff0c;而且容易出错。为了解决这个问题&#xff0c;我们可以借助固乔科技推出的【固乔快递查询助手】软件&#xff0c;轻松实现全国快递的批…...

DVWA | CSRF(LowMedium)攻击的渗透实践

目录 概述 Low Medium 概述 CSRF&#xff08;Cross-Site Request Forgery&#xff0c;跨站请求伪造&#xff09; 是一种网络攻击方式。 通过伪造当前用户的行为&#xff0c;让目标服务器误以为请求由当前用户发起&#xff0c;并利用当前用户权限实现业务请求伪造。 例如&a…...

Tmagic-editor低代码底层拖拽库Moveable示例学习

在前面咱们的自研低代码海报制作平台学习分享计划中分享了自己开发的基本拖拽组件&#xff0c;也只是做了最简单的基本实现。真要写产品&#xff0c;更多还是依赖相关的开源优秀库。 文章目录 参考基本拖拽基本缩放基本Scalable基本旋转基于原点的拖拽和旋转关于练习源码 参考 …...

公开测评:文件防泄密系统哪家好|4款文件防泄密软件推荐

在文件防泄密系统领域&#xff0c;有多款软件以其高效、安全和全面的功能脱颖而出&#xff0c;为企业数据保护提供了有力支持。以下是四款值得推荐的文件防泄密软件&#xff0c;它们各具特色&#xff0c;能够满足不同企业的数据安全需求。 1. 安企神软件 7天试用版https://wor…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…...

基于Uniapp开发HarmonyOS 5.0旅游应用技术实践

一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架&#xff0c;支持"一次开发&#xff0c;多端部署"&#xff0c;可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务&#xff0c;为旅游应用带来&#xf…...

MMaDA: Multimodal Large Diffusion Language Models

CODE &#xff1a; https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA&#xff0c;它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构&#xf…...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等

&#x1f50d; 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术&#xff0c;可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势&#xff0c;还能有效评价重大生态工程…...

AspectJ 在 Android 中的完整使用指南

一、环境配置&#xff08;Gradle 7.0 适配&#xff09; 1. 项目级 build.gradle // 注意&#xff1a;沪江插件已停更&#xff0c;推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

Pinocchio 库详解及其在足式机器人上的应用

Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库&#xff0c;专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性&#xff0c;并提供了一个通用的框架&…...

10-Oracle 23 ai Vector Search 概述和参数

一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI&#xff0c;使用客户端或是内部自己搭建集成大模型的终端&#xff0c;加速与大型语言模型&#xff08;LLM&#xff09;的结合&#xff0c;同时使用检索增强生成&#xff08;Retrieval Augmented Generation &#…...

JAVA后端开发——多租户

数据隔离是多租户系统中的核心概念&#xff0c;确保一个租户&#xff08;在这个系统中可能是一个公司或一个独立的客户&#xff09;的数据对其他租户是不可见的。在 RuoYi 框架&#xff08;您当前项目所使用的基础框架&#xff09;中&#xff0c;这通常是通过在数据表中增加一个…...

【Linux】Linux 系统默认的目录及作用说明

博主介绍&#xff1a;✌全网粉丝23W&#xff0c;CSDN博客专家、Java领域优质创作者&#xff0c;掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围&#xff1a;SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...