spring+SpringMVC+MyBatis之配置多数据源

news/2024/5/3 1:12:49/文章来源:https://blog.csdn.net/chendongpu/article/details/126830769

数据库准备
  1、准备2个数据库,本例以mysql为例

在第一个数据库新建表user

-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',`name` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '名称',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;-- ----------------------------
-- Records of user
-- ----------------------------
BEGIN;
INSERT INTO `user` VALUES (1, '张三');
INSERT INTO `user` VALUES (2, '李四');
INSERT INTO `user` VALUES (3, '王五');
COMMIT;

在第二个数据库中,新建表dog

-- ----------------------------
-- Table structure for dog
-- ----------------------------
DROP TABLE IF EXISTS `dog`;
CREATE TABLE `dog` (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',`dog_name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '狗名',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;-- ----------------------------
-- Records of dog
-- ----------------------------
BEGIN;
INSERT INTO `dog` VALUES (1, '旺财');
INSERT INTO `dog` VALUES (2, '二哈');
INSERT INTO `dog` VALUES (3, '大黑');
COMMIT;

项目搭建
  1、搭建一个Springmvc + Spring + Mybatis maven项目,
POM文件中引入AOP相关依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion><groupId>com.example</groupId>
<artifactId>muldatasource</artifactId>
<version>1.0-SNAPSHOT</version><!-- 定义maven变量 -->
<properties><!-- spring --><spring.version>4.3.7.RELEASE</spring.version><!-- Mybatis --><mybatis.version>3.5.0</mybatis.version><!-- Mybatis 整合 Spring --><mybatis-spring.version>2.0.0</mybatis-spring.version><!-- mysql --><mysql.version>5.1.32</mysql.version><!-- c3p0 连接池 --><c3p0.version>0.9.5.4</c3p0.version><!-- logback --><slf4j-api.version>1.7.5</slf4j-api.version><logback.version>0.9.30</logback.version><!-- Servlet --><servlet.version>3.0.1</servlet.version><jsp-api.version>2.2</jsp-api.version><!-- jstl --><jstl.version>1.2</jstl.version><standard.version>1.1.2</standard.version><!-- test junit --><junit.version>3.8.1</junit.version><!-- jdk --><jdk.version>1.8</jdk.version><maven.compiler.plugin.version>2.3.2</maven.compiler.plugin.version><jackson.version>2.8.8</jackson.version>
</properties><dependencies><!-- Spring IOC 核心容器 --><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-expression</artifactId><version>${spring.version}</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>${jackson.version}</version></dependency><!-- Spring AOP 切面 模块 --><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.aspectj</groupId><artifactId>aspectjrt</artifactId><version>1.9.2</version></dependency><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.9.2</version></dependency><!-- Spring WEB MVC 模块 --><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring.version}</version></dependency><!-- Spring 事物 模块 --><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>${spring.version}</version></dependency><!-- Spring ORM 对象关系映射 模块 --><dependency><groupId>org.springframework</groupId><artifactId>spring-orm</artifactId><version>${spring.version}</version></dependency><!-- Spring JDBC 模块 --><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>${spring.version}</version></dependency><!-- Mybatis --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>${mybatis.version}</version></dependency><!-- Mybatis 整合 Spring --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>${mybatis-spring.version}</version></dependency><!-- mysql --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql.version}</version></dependency><!-- c3p0 连接池 --><!-- https://mvnrepository.com/artifact/c3p0/c3p0 --><dependency><groupId>com.mchange</groupId><artifactId>c3p0</artifactId><version>${c3p0.version}</version></dependency><!-- logback --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>${slf4j-api.version}</version><type>jar</type><scope>compile</scope></dependency><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-core</artifactId><version>${logback.version}</version><type>jar</type></dependency><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>${logback.version}</version><type>jar</type></dependency><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-access</artifactId><version>${logback.version}</version></dependency><!-- Servlet --><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>${servlet.version}</version><scope>provided</scope></dependency><dependency><groupId>javax.servlet.jsp</groupId><artifactId>jsp-api</artifactId><version>${jsp-api.version}</version><scope>provided</scope></dependency><!-- jstl --><dependency><groupId>javax.servlet</groupId><artifactId>jstl</artifactId><version>${jstl.version}</version></dependency><dependency><groupId>taglibs</groupId><artifactId>standard</artifactId><version>${standard.version}</version></dependency><!-- test --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>${junit.version}</version><scope>test</scope></dependency></dependencies><build><plugins><!-- define the project compile level --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>${maven.compiler.plugin.version}</version><configuration><source>${jdk.version}</source><target>${jdk.version}</target></configuration></plugin></plugins><finalName>test_spring_mybatis</finalName>
</build>
</project>

项目目录:
在这里插入图片描述
配置文件jdbc.properties

datasource1.jdbc.driver=com.mysql.jdbc.Driverdatasource1.jdbc.url=jdbc:mysql://127.0.0.1:3306/test_mybatis?useUnicode=true&characterEncoding=utf8datasource1.jdbc.username=rootdatasource1.jdbc.password=rootdatasource2.jdbc.driver=com.mysql.jdbc.Driverdatasource2.jdbc.url=jdbc:mysql://127.0.0.1:3306/test_mybatis2?useUnicode=true&characterEncoding=utf8datasource2.jdbc.username=rootdatasource2.jdbc.password=root

编辑一个扩展AbstractRoutingDataSource类,DynamicDataSource.java

package com.test.datasource;import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;/***     动态数据源(依赖于spring)* @author chenheng* @date 2019-08-03 17:27:35**/
public class DynamicDataSource extends AbstractRoutingDataSource {@Overrideprotected Object determineCurrentLookupKey() {return DataSourceHolder.getDataSource();}}

封装一个的对数据源进行操作的类,DataSourceHolder.java

package com.test.datasource;public class DataSourceHolder {// 线程本地环境private static final ThreadLocal<String> dataSources = new ThreadLocal<String>();// 设置数据源public static void setDataSource(String customerType) {dataSources.set(customerType);}// 获取数据源public static String getDataSource() {return (String) dataSources.get();}// 清除数据源public static void clearDataSource() {dataSources.remove();}
}

我们可以应用spring aop来设置,把配置的数据源类型都设置成为注解标签,在service层中需要切换数据源的方法上,写上注解标签,调用相应方法切换数据源咯(就跟你设置事务一样)

@TargetDataSource(name= TargetDataSource.SLAVE)public List<Dog> getAll(){return dogDao.getAll();}

编辑注解标签TargetDataSource.java

package com.test.annotation;import java.lang.annotation.*;@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface TargetDataSource {String name() default TargetDataSource.MASTER;public static String MASTER = "dataSource1";public static String SLAVE = "dataSource2";}

编辑切面的Bean,DataSourceExchange.java

package com.test.datasource;import java.lang.reflect.Method;import org.springframework.aop.AfterReturningAdvice;
import org.springframework.aop.MethodBeforeAdvice;import com.test.annotation.TargetDataSource;public class DataSourceExchange implements MethodBeforeAdvice, AfterReturningAdvice {@Overridepublic void afterReturning(Object returnValue, Method method, Object[] args, Object target) throws Throwable {DataSourceHolder.clearDataSource();}@Overridepublic void before(Method method, Object[] args, Object target) throws Throwable {// 这里TargetDataSource是自定义的注解if (method.isAnnotationPresent(TargetDataSource.class)) {TargetDataSource datasource = method.getAnnotation(TargetDataSource.class);DataSourceHolder.setDataSource(datasource.name());} else {if(target.getClass().isAnnotationPresent(TargetDataSource.class)){TargetDataSource datasource = target.getClass().getAnnotation(TargetDataSource.class);DataSourceHolder.setDataSource(datasource.name());}}}
}

配置文件spring-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:context="http://www.springframework.org/schema/context"xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring"xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://mybatis.org/schema/mybatis-springhttp://mybatis.org/schema/mybatis-spring.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-4.0.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-4.0.xsd"><!-- 自动扫描,将类自动注册为bean,@Controller注解在spring mvc中扫描 --><context:component-scan base-package="com.test"><context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/></context:component-scan><!-- 引入数据库的配置文件 --><context:property-placeholder location="classpath:jdbc.properties" /><bean id="dataSource1" class="com.mchange.v2.c3p0.ComboPooledDataSource"><property name="jdbcUrl" value="${datasource1.jdbc.url}"></property><property name="driverClass" value="${datasource1.jdbc.driver}"></property><property name="user" value="${datasource1.jdbc.username}"></property><property name="password" value="${datasource1.jdbc.password}"></property></bean><bean id="dataSource2" class="com.mchange.v2.c3p0.ComboPooledDataSource"><property name="jdbcUrl" value="${datasource2.jdbc.url}"></property><property name="driverClass" value="${datasource2.jdbc.driver}"></property><property name="user" value="${datasource2.jdbc.username}"></property><property name="password" value="${datasource2.jdbc.password}"></property></bean><!-- 数据源:Spring用来控制业务逻辑。数据源、事务控制、aop --><bean id="dataSource" class="com.test.datasource.DynamicDataSource"><property name="targetDataSources"><map key-type="java.lang.String"><entry key="dataSource1" value-ref="dataSource1"></entry><entry key="dataSource2" value-ref="dataSource2"></entry></map></property><!-- 默认目标数据源为你主库数据源 --><property name="defaultTargetDataSource" ref="dataSource1"/></bean><!-- spring事务管理 --><bean id="dataSourceTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"></property></bean><!-- 开启基于注解的事务 --><tx:annotation-driven transaction-manager="dataSourceTransactionManager" order="2"/><!--整合mybatis目的:1、spring管理所有组件。mapper的实现类。service==>dao   @Autowired:自动注入mapper;2、spring用来管理事务,spring声明式事务--><!--创建出SqlSessionFactory对象  --><bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource"></property><!-- configLocation指定全局配置文件的位置 --><property name="configLocation" value="classpath:mybatis-config.xml"></property><!--mapperLocations: 指定mapper文件的位置--><property name="mapperLocations" value="classpath:mybatis/mapper/*.xml"></property></bean><!--配置一个可以进行批量执行的sqlSession  --><bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate"><constructor-arg name="sqlSessionFactory" ref="sqlSessionFactoryBean"></constructor-arg><constructor-arg name="executorType" value="BATCH"></constructor-arg></bean><!-- 扫描所有的mapper接口的实现,让这些mapper能够自动注入;base-package:指定mapper接口的包名--><mybatis-spring:scan base-package="com.test.dao"/><!-- 配置切面的Bean --><bean id="dataSourceExchange" class="com.test.datasource.DataSourceExchange"/><!-- 配置AOP --><aop:config><!-- 配置切点表达式  --><aop:pointcut id="servicePointcut" expression="execution(* com.test.service..*(..))"/><!-- 关键配置,切换数据源一定要比持久层代码更先执行(事务也算持久层代码) <aop:advisor advice-ref="txAdvice" pointcut-ref="service" order="2"/> --><aop:advisor advice-ref="dataSourceExchange" pointcut-ref="servicePointcut" order="1"/></aop:config></beans>

注意:Spring中的事务是通过aop来实现的,当我们自己写aop拦截的时候,会遇到跟spring的事务aop执行的先后顺序问题,比如说动态切换数据源的问题,如果事务在前,数据源切换在后,会导致数据源切换失效,所以就用到了Order(排序)这个关键字

<aop:advisor advice-ref="dataSourceExchange" pointcut-ref="servicePointcut" order="1"/>
<!-- 开启基于注解的事务 -->
<tx:annotation-driven transaction-manager="dataSourceTransactionManager" order="2"/>

在service上加上注解即可使用

@TargetDataSource(name= TargetDataSource.SLAVE)public List<Dog> getAll(){return dogDao.getAll();}

Dao层
UserDao.java

package com.test.dao;import com.test.bean.User;import java.util.List;public interface UserDao {List<User> getAll();}

DogDao.java

package com.test.dao;import com.test.annotation.TargetDataSource;
import com.test.bean.Dog;
import org.apache.ibatis.annotations.Select;import java.util.List;public interface DogDao {List<Dog> getAll();@Select("INSERT INTO dog (dog_name) VALUES (#{dogName})")void save(Dog dog);
}

Xml文件
mybatis-config.xml,路径classpath:mybatis/mybatis-config.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><settings><setting name="mapUnderscoreToCamelCase" value="true"/></settings>
</configuration>

UserMapper.xml,文件路径classpath:mybatis/mapper/UserMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.4//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.test.dao.UserDao"><resultMap type="com.test.bean.User" id="user"><id property="id" column="id"/><result property="name" column="name"/></resultMap><!-- 获取所有用户 --><select id="getAll" resultMap="user">select * from user</select></mapper>

DogMapper.xml,文件路径classpath:mybatis/mapper/DogMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.4//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.test.dao.DogDao"><!-- 获取所有狗 --><select id="getAll" resultType="com.test.bean.Dog">select * from dog</select></mapper>

Servcie层
DogService.java

package com.test.service;import com.test.annotation.TargetDataSource;
import com.test.bean.User;
import com.test.dao.DogDao;
import com.test.bean.Dog;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;import java.util.List;@Service
public class DogService {@AutowiredDogDao dogDao;/*** 在springboot中已经默认对jpa、jdbc、mybatis开启了事事务,引入它们依赖的时候,事物就默认开启。* springboot开启事务很简单,只需要一个注解@Transactional 就可以了。* @Transactional可以在在方法上和类上使用。* @return*/@Transactional(value = "dataSourceTransactionManager")@TargetDataSource(name= TargetDataSource.SLAVE)public Integer save() {Dog dog = new Dog();dog.setDogName("大黄");dogDao.save(dog);return 1/0;}@TargetDataSource(name= TargetDataSource.SLAVE)public List<Dog> getAll(){return dogDao.getAll();}
}

UserService.java

package com.test.service;import com.test.annotation.TargetDataSource;
import com.test.bean.User;
import com.test.dao.UserDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;@Service
public class UserService {@AutowiredUserDao userDao;@TargetDataSource(name= TargetDataSource.MASTER)public List<User> getAll(){return userDao.getAll();}
}

Controller层

package com.test.controller;import com.test.bean.Dog;
import com.test.bean.User;
import com.test.service.DogService;
import com.test.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.List;@RestController
public class TestController {@AutowiredUserService userService;@AutowiredDogService dogService;@RequestMapping("users.html")public List<User> users() {return userService.getAll();}@RequestMapping("dogs.html")public List<Dog> dogs() {return dogService.getAll();}@RequestMapping("/dog/save.html")public Integer save() {return dogService.save();}
}

实例

User.java

    package com.test.bean;public class User {private Integer id;private String name;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}
}

Dog.java

  package com.test.bean;public class Dog {private Integer id;private String dogName;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getDogName() {return dogName;}public void setDogName(String dogName) {this.dogName = dogName;}
}

项目测试
  1、启动项使用 http://localhost:8080/users.html地址访问获取所有用户,由此说明masterDataSource能正常使用
  在这里插入图片描述
2、使用地址 http://localhost:8080/dogs.html 访问获取所有狗,由此说明slaveDataSource能正常使用
在这里插入图片描述
3、使用地址 http://localhost:8080/dog/save.html,新增数据,查看数据库中数据是否增加,未增加,判断说明事务已生效。

下载源码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_7027.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

gateway过滤器

简介 1 作用: 过滤器就是在请求的传递过程中,对请求和响应做一些手脚 2 生命周期: Pre Post 3 分类: 局部过滤器(作用在某一个路由上) 全局过滤器(作用全部路由上) 在Gateway中, Filter的生命周期只有两个&#xff1a;“pre” 和 “post”。 PRE&#xff1a; 这种过滤器在请…

【蓝桥杯国赛真题24】Scratch货物运输 第十三届蓝桥杯 图形化编程scratch国赛真题和答案讲解

目录 scratch货物运输 一、题目要求 编程实现 二、案例分析 1、角色分析

PostGIS是什么

1. 什么是GIS(知识地图定位) 1.1. GIS概念 地理信息系统&#xff08;Geographic Information System或 Geo&#xff0d;Information system&#xff0c;GIS&#xff09;有时又称为“地学信息系统”。它是一种特定的十分重要的空间信息系统。它是在计算机硬、软件系统支持下&a…

注册中心对比和选型:Zookeeper、Eureka、Nacos、Consul和ETCD

转自:https://juejin.cn/post/7068065361312088095 下面是文章目录:注册中心基本概念 什么是注册中心? 注册中心主要有三种角色:服务提供者(RPC Server):在启动时,向 Registry 注册自身服务,并向 Registry 定期发送心跳汇报存活状态。 服务消费者(RPC Client):在启…

【Linux虚拟机安装】在VMware Workstation上安装ubuntu虚拟机

目录0、工具清单1、下载操作系统镜像2、创建虚拟机3、设置ubuntu系统0、工具清单 虚拟机软件&#xff1a;VMware Workstationubuntu镜像版本&#xff1a;Ubuntu 20.04.4 LTS (Focal Fossa)宿主机操作系统&#xff1a;Windows 10 专业版 1、下载操作系统镜像 官方下载网址&am…

氨基聚苯乙烯包覆硅胶微球SG-PS-NH2/聚苯乙烯/硫化镉PS/CdS复合材料/聚苯乙烯支载井冈霉素微球制备

今天小编给大家分享了氨基聚苯乙烯包覆硅胶微球SG-PS-NH2/聚苯乙烯/硫化镉PS/CdS复合材料/聚苯乙烯支载井冈霉素微球的制备方法&#xff0c;一起来看看&#xff01; 小编分享-氨基聚苯乙烯包覆硅胶微球SG-PS-NH2的制备方法&#xff1a; 通过对硅胶微球进行聚苯乙烯包覆,然后功…

javascript为什么叫脚本语言

脚本script是使用一种特定的描述性语言&#xff0c;依据一定的格式编写的可执行文件&#xff0c;又称作宏或批处理文件。 脚本通常可以由应用程序临时调用并执行。 各类脚本目前被广泛地应用于网页设计中&#xff0c;因为脚本不仅可以减小网页的规模和提高网页浏览速度&#xf…

为什么ASO很重要?

由于用户对多功能App的需求量增大&#xff0c;导致榜单影响力下滑&#xff0c;越来越多的用户通过搜索相关词来查找目标App。同时搜索对排名的影响权重也被各家应用商店加大。数据库显示&#xff0c;用户越来越习惯直接搜索关键词来搜索想要的应用。各应用商店收录热词现阶段有…

压缩网络相关

同样搬运模式 勿怪呀 大佬们 自从深度学习&#xff08;Deep Learning&#xff09;开始流行&#xff0c;已经在很多领域有了很大的突破&#xff0c;尤其是AlexNet一举夺得ILSVRC 2012 ImageNet图像分类竞赛的冠军后&#xff0c;卷积神经网络&#xff08;CNN&#xff09;的热潮便…

【JY】YJK前处理参数详解及常见问题分析:控制信息(二)

点击蓝字 求求关注【写在前文】本文介绍计算控制信息之控制信息。【计算信息参数详解】一、控制信息A区参数详解1、水平力与整体坐标夹角该参数为地震作用、风荷载计算时的X正向与结构整体坐标系下X轴的夹角&#xff0c;逆时针方向为正&#xff0c;单位为度。常见问题&#xf…

10、MyBatis-Plus 多数据源

第一篇&#xff1a;1、Mybatis-Plus 创建SpringBoot项目 第二篇&#xff1a;2、Mybatis-Plus 测试增、删、改、查 第三篇&#xff1a;3、Mybatis-Plus 自定义sql语句 第四篇&#xff1a;4、Mybatis-Plus 通用service的操作 第五篇&#xff1a;5、Mybatis-Plus 常用注解 第六篇&…

004-GoingDeeperConvolutions2014(googLeNet)

Going Deeper with Convolutions #paper1. paper-info 1.1 MetadataAuthor:: [[Christian Szegedy]], [[Wei Liu]], [[Yangqing Jia]], [[Pierre Sermanet]], [[Scott Reed]], [[Dragomir Anguelov]], [[Dumitru Erhan]], [[Vincent Vanhoucke]], [[Andrew Rabinovich]] 作者机…

UNIAPP----video标签层级问题的三种解决方法

uniapp的app端&#xff0c;video标签层级过高&#xff0c;无法轻易被遮盖。 三种解决方法&#xff0c;真机测试没问题。代码复制即可。 1.cover-view或者cover-image&#xff0c;放在video标签内使用&#xff0c;子绝父相 缺点&#xff1a;只能改变cover-view样式&#xff0…

算法落地思考:如何让智能运维更智能

嘉宾 | 王鹏 整理人 | 西狩xs 出品 | CSDN云原生 AIOps是人工智能与运维的结合&#xff0c;能够基于已有的运维数据&#xff0c;利用人工智能算法&#xff0c;通过机器学习的方式帮助企业提升运维效率&#xff0c;解决自动化运维无法管理的问题。 2022年8月30日&#xff0…

spring底层原理初探

一&#xff0c;spring原理初探 1&#xff0c;bean的创建生命周期 userService.class --> 推断构造方法 --> 实例化对象 --> 依赖注入(属性填充) --> 初始化前(PostConstruct) --> 初始化 (Initializingbean) --> 初始化后(AOP&#xff0c;bean的后置处理器…

Wireshark分析https流量

这里写自定义目录标题本文介绍使用wireshark分析https流量的方法。适用chromium内核的浏览器和firefox浏览器&#xff0c;前提是这些浏览器内核都支持如下选项&#xff1a; –ssl-key-log-file 浏览器配置 添加启动参数 例如&#xff1a; firefox.exe --ssl-key-log-filec:/s…

Python中setdefault()通过键查找字典中对应的值

【小白从小学Python、C、Java】 【Python-计算机等级考试二级】 【Python-数据分析】 字典中根据键k查找键k对应的值v 如果没找到键k&#xff0c;则创建键k并赋值为default setdefault() [太阳]选择题 以下Python代码中setdefault(d, 666)的返回值是什么&#xff1f; myDic {&…

java基于微信小程序的大学生个人家庭理财产品 uniapp小程序

为了方便操作,从多方面把用户的个人支付&#xff0c;个人收入等财产管理的数据,以及他们的生活结余和消费统计,用科学统计的方法把这些数据存储在财务管理软件之中&#xff61;文中着重论述了该系统的功能与实现,如数据流程与存储&#xff64;管理等功能,并对关键的技术作了较详…

动态规划 - 背包问题 回文串分割

目录 1.背包问题 1.1 题目描述 1.2 画图分析 1.3 思路分析 1.4 代码示例 2. 回文串分割 2.1 题目描述 2.2 思路分析 2.3 代码示例 1.背包问题 1.1 题目描述 有 n 个物品和一个大小为 m 的背包. 给定数组 A 表示每个物品的大小 和数组 V 表示每个物品的价值.问最多能装…

ROS+Arduino学习导航贴

前言 原先写了一些ROSarduino学习记录的帖子&#xff0c;发现每次找起来非常麻烦&#xff0c;所以做一个汇总帖&#xff0c;以后需要的话&#xff0c;找起来就方便了。 关于我用的开发板&#xff0c;一开始学习的时候&#xff0c;我用的开发板是arduino uno这类的&#xff0c…