# Spring部分笔记概要
1、SpringBoot JPA注意点
若在参数上添加了@RequestBody,则不为表单提交,应该使用json格式去提交,若未添加,则是表单提交,在前端网页或是Apifox可使用Params参数表单提交。
jpa数据库正向工程关键在于dao层继承JpaRepository<User,Long>
需要引入的pom依赖
<?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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>springBootJPA</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.6.RELEASE</version>
<relativePath/>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- springBoot JPA的起步依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- MySQL连接驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.15</version>
</dependency>
<!-- 配置使用redis启动器 -->
<!-- <dependency>-->
<!-- <groupId>org.springframework.boot</groupId>-->
<!-- <artifactId>spring-boot-starter-data-redis</artifactId>-->
<!-- </dependency>-->
</dependencies>
</project>
2、在虚拟机上部署项目
首先注意关闭虚拟机的防火墙否则无法从外部访问
- 在
pom.xml
中配置Spring Boot项目的maven插件
<**build**>``
<**plugins**>`` <!-- 打jar包时如果不配置该插件,打出来的jar包没有清单文件 -->`` <**plugin**>`` <**groupId**>org.springframework.boot</**groupId**>``
<**artifactId**>spring-boot-maven-plugin</**artifactId**>``
</**build**>
-
运行
maven的打包命令 : package -
打包之前我们需要跳过测试 , 如果不跳过测试那么我们编写的测试类都会被maven自动执行, 可能会出现错误,导致打包不成功
-
执行之后可以在控制台看到打包的日志信息, 其中有生成的包的位置
.jar.original
是普通jar包,不包含依赖
.jar 是可执行jar包,包含了pom中的所有依赖,可以直接用
java -jar` 命令执行
如果是部署,就用.jar
, 如果是给别的项目用,就要给.jar.original
这个包,把.original后缀去掉即可
5)使用命令:java –jar ``包全名
6)在浏览器上使用虚拟机地址+方法路径 http://192.168.119.130:10001/user/findAll
3、自定义注解
下面是一个自定义注解的实例
1、编写自定义注解,先建立一个Anotation层来存放所有的自定义注解
package com.example.annotation;
import java.lang.annotation.*;
/**
* @description: 自定义注解
* @author:宋小龙
* @createDate: 2022-08-30 23:04
**/
//该注解可以应用于类、接口(包括注解类型)、枚举
@Target(ElementType.TYPE)
//该注解标记的元素可以被Javadoc 或类似的工具文档化
@Documented
//该注解的生命周期,由JVM 加载,包含在类文件中,在运行时可以被获取到
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
// 给自定义注解创建基本属性
// 可以使用default作为默认值使用
String name() default "法外狂徒张三";
// 这里没用default默认赋值,一会手动复制
int age() ;
}
2 编写实体
package com.example.entity;
import com.example.annotation.MyAnnotation;
import lombok.Data;
/**
* @description: 用户实体类
* @author:宋小龙
* @createDate: 2022-08-30 23:06
**/
@Data
// 把我们自定义的注解作用到user类上
@MyAnnotation(age = 18)
public class User {
String name;
int age;
}
3、编写测试代码
package com.example.test;
import com.example.annotation.MyAnnotation;
import com.example.entity.User;
/**
* @description: 测试自定义注解
* @author: 宋小龙
* @createDate: 2022-08-30 23:09
**/
public class AnnotationTest {
public static void main(String[] args){
//获取User的Class对象
Class<?> userClass = User.class;
//判断Class对象上是否有我们设置的自定义注解
if (userClass.isAnnotationPresent(MyAnnotation.class)) {
System.out.println("User上配置了自定义注解");
//获取SystemConfig注解
MyAnnotation myAnnotation = userClass.getAnnotation(MyAnnotation.class);
System.out.println("MyAnnotation.name:" + myAnnotation.name() + "; MyAnnotation.age:" + myAnnotation.age());
} else {
System.out.println("User上没有配置自定义注解");
}
}
}
4、更改springboot的数据源 源码,实现自定义切换数据源
一、手动创建更改所需引入的Maven依赖文件
先新建一个项目用作打包为Maven依赖文件
1、该步骤中项目需要引入的Maven文件
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.oracle</groupId>
<artifactId>spring-boot-jdbc-starter</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<artifactId>spring-boot-starter-parent</artifactId>
<groupId>org.springframework.boot</groupId>
<version>2.2.5.RELEASE</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!--引入spring‐boot‐starter;所有starter的基本配置-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.8</version>
</dependency>
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web-services</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>
2、在resource下创建META-INF文件夹,在文件夹下写入文件spring.factories
# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.oracle.autoconfig.DataSourceAutoConfiguration
3、配置文件DataSourceProperties,获取数据库的相关配置信息
package com.oracle.autoconfig;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties(prefix = "spring.jdbc.datasource")
public class DataSourceProperties {
private String driverClassName ;
private String url;
private String username;
private String password;
public String getDriverClassName() {
return driverClassName;
}
public void setDriverClassName(String driverClassName) {
this.driverClassName = driverClassName;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
4、配置你想要自启动的数据库方式,创建文件DataSourceAutoConfiguration。其中的@Bean都是去匹配你要更换自启动数据库的类型,如有需要,可自己添加种类
package com.oracle.autoconfig;
import com.alibaba.druid.pool.DruidDataSource;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
import javax.sql.DataSource;
@Component
@EnableConfigurationProperties(DataSourceProperties.class)
public class DataSourceAutoConfiguration {
@Autowired
private DataSourceProperties dataSourceProperties;
@Bean
@ConditionalOnProperty(value = "spring.jdbc.datasource.type",havingValue = "druid")
private DataSource createDataSource(){
DruidDataSource dataSource = new DruidDataSource();
dataSource.setUrl(dataSourceProperties.getUrl());
dataSource.setUsername(dataSourceProperties.getUsername());
dataSource.setPassword(dataSourceProperties.getPassword());
dataSource.setDriverClassName(dataSourceProperties.getDriverClassName());
return dataSource;
}
@Bean
@ConditionalOnProperty(value = "spring.jdbc.datasource.type",havingValue = "c3p0")
public DataSource createC3P0DataSource() throws Exception{
ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setDriverClass(dataSourceProperties.getDriverClassName());
dataSource.setJdbcUrl(dataSourceProperties.getUrl());
dataSource.setUser(dataSourceProperties.getUsername());
dataSource.setPassword(dataSourceProperties.getPassword());
return dataSource;
}
}
5、在该项目的Maven设置中,选择clean、package、install。
其中尤其要注意在pom文件中的分类设置,这个关系到被更改数据源项目引用Maven包时是否能引用生效
<groupId>com.oracle</groupId>
<artifactId>spring-boot-jdbc-starter</artifactId>
<version>1.0-SNAPSHOT</version>
新项目想要更换自启动的数据源,首先就是要在pom文件中的标签内引用上段中的代码依赖。
二、在新项目中使用
1、最重要的是在pom文件中导入第一大步中打成的依赖包
<dependency>
<groupId>com.oracle</groupId>
<artifactId>spring-boot-jdbc-starter</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
2、在resource中灵活建立选取数据库的yml文件
application.yml
spring:
profiles:
active: dev//这里的dev决定了要选取的数据库配置文件,比如这里选取的就是下面的application-dev.yml,若是master,则选择的是application-master.yml
application-dev.yml
spring:
jdbc:
datasource:
driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql:///borrowing?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC&allowMultiQueries=true
username: root
password: 123456
type: druid//与上面@Bean中的havingValue = "druid",表示这里选取的自启动数据源是druid
mvc:
view:
prefix: /WEB-INF/
suffix: .html
server:
port: 8081
application-master.yml
spring:
jdbc:
datasource:
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql:///jingpai?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC&allowMultiQueries=true
username: root
password: 123456
type: c3p0//与上面@Bean中的havingValue = "c3p0",表示这里选取的自启动数据源是c3p0
mvc:
view:
prefix: /WEB-INF/
suffix: .html
server:
port: 8084