Spring学习中的部分要点(未完)

# 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、在虚拟机上部署项目

​ 首先注意关闭虚拟机的防火墙否则无法从外部访问

  1. pom.xml中配置Spring Boot项目的maven插件
<**build**>``  
    <**plugins**>``    <!-- 打jar包时如果不配置该插件,打出来的jar包没有清单文件 -->``    <**plugin**>``      <**groupId**>org.springframework.boot</**groupId**>``   
 <**artifactId**>spring-boot-maven-plugin</**artifactId**>``  
</**build**>
  1. 运行maven的打包命令 : package

  2. 打包之前我们需要跳过测试 , 如果不跳过测试那么我们编写的测试类都会被maven自动执行, 可能会出现错误,导致打包不成功

  3. 执行之后可以在控制台看到打包的日志信息, 其中有生成的包的位置

.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

                                      
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值