SpringCloud
基于springcloud的权限框架
先来个彩蛋~本人搭建的权限框架,支持应用内权限验证、OAuth2。欢迎来踩,希望能对大家有所益助。🤝Star鼓励一下~~。
代码地址
spring boot 基础
之前有springMVC的使用经历,很多地方是跟springMVC对比的角度叙述的,有springMVC的经验会更好理解。
开始
创建maven项目,更改build path,去除错误提示
配置sb(spring boot后文统称sb)依赖
更改App类如第一张图,执行main方法,sb会启动自带的tomcat容器,启动成功,浏览器访问
不用配置任何配置文件,也不用显示的使用任何容器就可以启动,比以往spring的使用方便的多
sb配置
整个sb应用程序只有一个配置文件.properties或.yml,以.properties为例重写默认配置,配置文件名字必须是application
重新启动,浏览器访问localhost:8088/api/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包
把war包放到tomcat下启动
test启动失败,因为sb内嵌了t8,与t7冲突
排除Springboot中的tomcat相关依赖,记得添加作用域为provided的servlet-api
修改app类,继承SpringBootServletInitializer,重写configure
重新打包mvn clean package
启动tomcat还是报错error creating bean with name 'defaultvalidator' defined in class path resource,查询资料发现是tomcat版本需要8以上,更换tomcat8后不在报错,浏览器正常访问
注意:访问端口又成了默认8080,路径test而不是前面的api,配置外部tomcat后application.properties的配置失效
- jar方式
1.去掉外部tomcat配置
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
注解
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;
}
- @Bean
定义一个Bean,主要用在@Configuration和@SpringBootConfiguration注解的类或@Component注解的类。
以淘宝工具接口参数配置为例,配置文件中toolappkey,toolsecret,toolurl如下图:
定义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();
}
验证结果
拦截器
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());
}
}
验证结果
异常处理
(^_^)
未完,待续。。
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
- 转载请注明出处
- 请小编喝茶~