SpringCloud

基于springcloud的权限框架

先来个彩蛋~本人搭建的权限框架,支持应用内权限验证、OAuth2。欢迎来踩,希望能对大家有所益助。🤝Star鼓励一下~~。
代码地址

spring boot 基础

之前有springMVC的使用经历,很多地方是跟springMVC对比的角度叙述的,有springMVC的经验会更好理解。

开始

创建maven项目,更改build path,去除错误提示
bp
配置sb(spring boot后文统称sb)依赖
depend
更改App类如第一张图,执行main方法,sb会启动自带的tomcat容器,启动成功,浏览器访问
start
不用配置任何配置文件,也不用显示的使用任何容器就可以启动,比以往spring的使用方便的多

sb配置

整个sb应用程序只有一个配置文件.properties或.yml,以.properties为例重写默认配置,配置文件名字必须是application
prop
重新启动,浏览器访问localhost:8088/api/hello
hello

打包

sb可以打包成war和jar,前后端分离的项目适合打成jar,若不分离则war较好

  • war方式
    1.修改packaging
    <packaging>war</packaging>
    2.添加build
<build>
  <finalName>test</finalName>
  <resources>
    <resource>
      <directory>src/main/resources</directory>
      <filtering>true</filtering>
    </resource>
  </resources>
  <plugins>
    <plugin>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-maven-plugin</artifactId>
    </plugin>
    <plugin>
      <artifactId>maven-resources-plugin</artifactId>
      <version>2.5</version>
      <configuration><encoding>UTF-8</encoding></configuration>
    </plugin>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-surefire-plugin</artifactId>
      <version>2.18.1</version>
      <configuration><skipTests>true</skipTests></configuration>
    </plugin>
  </plugins>
</build>

3.mvn package就会生成test.war包
package1
把war包放到tomcat下启动
error1
test启动失败,因为sb内嵌了t8,与t7冲突
排除Springboot中的tomcat相关依赖,记得添加作用域为provided的servlet-api
depex
修改app类,继承SpringBootServletInitializer,重写configure
SpringBootServletInitializer
重新打包mvn clean package 启动tomcat还是报错error creating bean with name 'defaultvalidator' defined in class path resource,查询资料发现是tomcat版本需要8以上,更换tomcat8后不在报错,浏览器正常访问
repT8
注意:访问端口又成了默认8080,路径test而不是前面的api,配置外部tomcat后application.properties的配置失效

  • jar方式
    1.去掉外部tomcat配置
    ex_dis
    2.修改packaging
    <packaging>jar</packaging>
    3.添加build
<build>
    <finalName>api</finalName>
    <resources>
      <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
      </resource>
    </resources>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <configuration>
          <fork>true</fork>
          <mainClass>test.App</mainClass>
        </configuration>
        <executions>
          <execution><goals><goal>repackage</goal></goals></execution>
        </executions>
      </plugin>
      <plugin>
        <artifactId>maven-resources-plugin</artifactId>
        <version>2.5</version>
        <configuration>
          <encoding>UTF-8</encoding>
          <useDefaultDelimiters>true</useDefaultDelimiters>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.18.1</version>
        <configuration><skipTests>true</skipTests></configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>2.3.2</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>
    </plugins>
  </build>

4.mvn clean package
java -jar api.jar启动
访问localhost:8088/api/hello成功

spring boot 进阶

读到这相信你已经发现sb的好处,代码简洁、结构清晰,前面是初步介绍sb,下面开始深入了解sb。

properties/yml文件

下面以properties为例列出sb常用配置

配置项 说明 举例
server.port 服务端口 server.port=8088
server.context-path 应用程序上下文 server.context-path=/api,则访问地址为:http://ip:port/api
spring.jpa.database 数据库类型 spring.jpa.database=MYSQL  JPA & Spring Data JPA
spring.jpa.properties.hibernate.dialect hql方言 spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
spring.jpa.showSql 是否打印sql语句 spring.jpa.showSql=true
spring.datasource.url 数据库连接字符串 spring.datasource.url=jdbc:mysql://localhost:3306/database?useUnicode=true&characterEncoding=UTF-8&useSSL=true
spring.datasource.username 数据库用户名 spring.datasource.username=root
spring.datasource.password 数据库密码 spring.datasource.password=root
spring.datasource.driverClassName 数据库驱动 spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.http.multipart.maxFileSize 最大文件上传大小,-1为不限制 spring.http.multipart.maxFileSize=-1

多环境配置

通常应用系统开发过程中经历开发、测试、生产三个阶段,不同阶段的环境配置往往不同,打包的时候再更改配置文件太不方便,于是我们可以采用多环境配置。
1.首先创建多环境配置文件,application-dev.properties(yml),application-test.properties,application-dep.properties,对应三个阶段,在各个文件中添加各自的环境配置信息。
2.更改默认配置文件,添加spring.profiles.active=dev,指定当前项目打包配置为dev,spring.profiles.active=dep则打包配置为dep。
3.运行:java -jar api.jar
multien

注解

sb主要采用注解的方式,下面详细介绍项目中常用注解。

  • @SpringBootApplication
    标识程序启动main方法,不加这个注解程序无法启动。SpringBootApplication类上有三个注解,@SpringBootConfiguration表示配置注解,@EnableAutoConfiguration表示自动配置,@ComponentScan表示扫描Bean的规则,@SpringBootApplication也可以使用这三个代替。
  • @Value
    定义全局变量,相当于以往public static声明变量。可以把全局变量存储在配置文件中通过@Value取出
    application.properties中添加自定义变量server.custompara=cpara,如下代码则可以取出cpara
@Value("${server.custompara}")
String custompara;
    
@RequestMapping("getcustompara")
String getCustomPara(){
  	return custompara;
}

custompara

  • @Bean
    定义一个Bean,主要用在@Configuration和@SpringBootConfiguration注解的类或@Component注解的类。
    以淘宝工具接口参数配置为例,配置文件中toolappkey,toolsecret,toolurl如下图:
    classano1
    定义Taobaotool参数类
/**
 * @author JIAY
 * taobao tool
 */
public class Taobaotool {
    private String toolappkey;
    private String toolsecret;
    private String toolurl;
    
    public void setToolappkey(String toolappkey){
    	this.toolappkey = toolappkey;
    }
    
    public void setToolsecret(String toolsecret){
    	this.toolsecret = toolsecret;
    }
    
    public void setToolurl(String toolurl){
    	this.toolurl = toolurl;
    }
    
    public String getToolappkey(){
    	return toolappkey;
    }
    
    public String getToolsecret(){
    	return toolsecret;
    }
    
    public String getToolurl(){
    	return toolurl;
    }
}

配置类加载参数

@SpringBootConfiguration
public class ConfigurationAnimation {
    
	@Value("${toolappkey}")
	private String toolappkey;
	@Value("${toolsecret}")
	private String toolsecret;
	@Value("${toolurl}")
	private String toolurl;
	
	@Bean
	public Taobaotool taobaotool(){
		Taobaotool tbt = new Taobaotool();
		tbt.setToolappkey(toolappkey);
		tbt.setToolsecret(toolsecret);
		tbt.setToolurl(toolurl);
		return tbt;
	}
}

注入Taobaotool并调用

//注入类
@Autowired
private Taobaotool taobaotool;
   
@RequestMapping("gettaobaotool")
String getTaobaotool(){
	return taobaotool.getToolappkey() + "," + taobaotool.getToolsecret() + "," + taobaotool.getToolurl();
}

验证结果
classano2

拦截器

API统一拦截,安全校验
创建拦截器类:ApiInterceptor,并实现 HandlerInterceptor 接口:

public class ApiInterceptor implements HandlerInterceptor {
	//请求之前    
	@Override    
	public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {        
	    System.out.println("进入拦截器");  
	    String sessionId = httpServletRequest.getParameter("sessionId");
		if(sessionId == null || sessionId.equals("")){
			String root = "status:0,errmsg:nologin";
			PrintWriter out = httpServletResponse.getWriter();
			out.print(root);
			return false;
		}else{
			if(sessionId.equals("1234567")){
				//放行
				return true;
			}else{
				return false;
			}
		}  
	}
	//请求时    
	@Override    
	public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {    }    
	//请求完成    
	@Override    
	public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {    }
}

添加拦截器:@SpringBootConfigration注解WebConfig类,继承WebMvcConfigurationSupport,重写addInterceptors

@SpringBootConfiguration
public class WebConfig extends WebMvcConfigurationSupport {
	@Override
	protected void addInterceptors(InterceptorRegistry registry) {        
	    super.addInterceptors(registry);        
		registry.addInterceptor(new ApiInterceptor());    
	}
}

验证结果
interceptor

异常处理

(^_^)

未完,待续。。
JPA & Spring Data JPA
JPA是Java Persistence API的简称,中文名Java持久层API,是Sun官方提出的Java持久化规范,其设计目标主要是为了简化现有的持久化开发工作和整合ORM技术。JPA使用XML文件或注解(JDK 5.0或更高版本)来描述对象-关联表的映射关系,能够将运行期的实体对象持久化到数据库,它为Java开发人员提供了一种ORM工具来管理Java应用中的关系数据。 简单地说,JPA就是为POJO(Plain Ordinary Java Object)提供持久化的标准规范,即将Java的普通对象通过对象关系映射(Object-Relational Mapping,ORM)持久化到数据库中。由于JPA是在充分吸收了现有Hibernate,TopLink,JDO等ORM框架的基础上发展而来的,因而具有易于使用、伸缩性强等优点。 Spring Data JPA 是 Spring 基于 Spring Data 框架、在JPA 规范的基础上开发的一个框架,使用 Spring Data JPA 可以极大地简化JPA 的写法,可以在几乎不用写实现的情况下实现对数据库的访问和操作,除了CRUD外,还包括分页和排序等一些常用的功能。

欢迎来访

  • 有问题欢迎留言或加交流qq:825121848
  • 转载请注明出处
  • 请小编喝茶~
Last Updated: 4/16/2022, 11:05:56 AM