博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringBoot相关
阅读量:6593 次
发布时间:2019-06-24

本文共 5960 字,大约阅读时间需要 19 分钟。

目录

目录创建于2017-12-18


SpringBoot

安装SpringBootCLI

  • 安装SDKMAN

    • 使用git bash运行 curl -s get.sdkman.io | bash
    • source "/Users/{yourname}/.sdkman/bin/sdkman-init.sh"根据实际目录去运行
    • spring –version
  • 注意:所有Controller类要和*Application同包或子包*

Springboot的测试模块

  • 可以使用MockMvc来测试Controller层的代码
  • 可以使用MockMvc的SpringSecurity支持来测试安全模块
  • 使用 WebIntegraionTest 测试运行中的Web容器
    • 启动嵌入式的Servlet容器来进行测试,下断言
  • 使用随机端口启动服务器 配置local.server.port=0
  • 使用Selenium来测试HTML页面,模拟浏览器的动作,查看系统运行状态

参考博客


配置文件

  • 将应用配置外置并注入成bean

多种配置文件并切换

yml方式

  • 单文件配置文件 application.yml
spring:      profiles:        active: development # 选用开发模式    ---    spring:      profiles: development      //一系列配置    ---    spring:      profiles: production      //一系列配置
  • 或者 多文件放 application-{profile}.yml

yml和Properties结合

  • 格式:application-{profile}.properties
  • 将上面的开发部分,发行部分的配置创建两个配置文件 application-dev.propertiesapplication-prod.properties
  • 在主配置文件application.yml中指明
spring:      profiles:        active: dev或者是prod

Web模块

上传下载文件

第一种直接上传到应用的webroot或者resources目录下,第二种上传到数据库中,第三种使用ftp。

  • 上传文件有大小限制,使用如下方法进行配置
@Beanpublic MultipartConfigElement multipartConfigElement() {    MultipartConfigFactory factory = new MultipartConfigFactory();    //单个文件最大    factory.setMaxFileSize("80MB"); //KB,MB    // 设置总上传数据总大小    factory.setMaxRequestSize("102400KB");    return factory.createMultipartConfig();}

错误页面跳转配置

@Configurationpublic class MvcConfig extends WebMvcConfigurerAdapter {
@Bean public EmbeddedServletContainerCustomizer containerCustomizer() { return (container -> { ErrorPage error401Page = new ErrorPage(HttpStatus.FORBIDDEN, "/403.html"); ErrorPage error404Page = new ErrorPage(HttpStatus.NOT_FOUND, "/404.html"); ErrorPage error500Page = new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR, "/500.html"); container.addErrorPages(error401Page, error404Page, error500Page); }); }}

跨域

不同的域名(主机)端口都会导致跨域问题

@Configurationpublic class CorsConfig {
private CorsConfiguration buildConfig() { CorsConfiguration corsConfiguration = new CorsConfiguration(); corsConfiguration.addAllowedOrigin("*"); // 允许任何域名使用 corsConfiguration.addAllowedHeader("*"); // 允许任何头 corsConfiguration.addAllowedMethod("*"); // 允许任何方法(post、get等) return corsConfiguration; } @Bean public CorsFilter corsFilter() { UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); source.registerCorsConfiguration("/**", buildConfig()); // 4 return new CorsFilter(source); }}

HTTPS的配置

  • 签发证书:
keytool -genkey -alias tomcat -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore.p12 -validity 3650
server:  context-path: /myth  ssl:    key-store: classpath:keystore.p12    key-store-password: demo1429336    key-store-type: PKCS12    key-alias: tomcat  port: 8888  session:    timeout: 3000

任意的一个@Configuration注解类里添加

@Beanpublic TomcatEmbeddedServletContainerFactory servletContainerFactory() {    TomcatEmbeddedServletContainerFactory factory =        new TomcatEmbeddedServletContainerFactory() {            @Override            protected void postProcessContext(Context context) {                //SecurityConstraint必须存在,可以通过其为不同的URL设置不同的重定向策略。                SecurityConstraint securityConstraint = new SecurityConstraint();                securityConstraint.setUserConstraint("CONFIDENTIAL");                SecurityCollection collection = new SecurityCollection();                collection.addPattern("/*");                securityConstraint.addCollection(collection);                context.addConstraint(securityConstraint);            }        };    factory.addAdditionalTomcatConnectors(createHttpConnector());    return factory;}private Connector createHttpConnector() {    Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");    connector.setScheme("http");    connector.setSecure(false);    connector.setPort(8887);//http端口(这是要新增加的一个端口)    connector.setRedirectPort(8888);// https 端口配置文件中tomcat启动的默认端口    return connector;}
  • 另一种方式
    方式不一样,没有成功
############ 证书颁发机构# CA机构私钥openssl genrsa -out ca.key 2048# CA证书openssl req -x509 -new -key ca.key -out ca.crt############ 服务端# 生成服务端私钥openssl genrsa -out server.key 2048# 生成服务端证书请求文件openssl req -new -key server.key -out server.csr# 使用CA证书生成服务端证书  关于sha256,默认使用的是sha1,在新版本的chrome中会被认为是不安全的,因为使用了过时的加密算法。openssl x509 -req -sha256 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -days 3650 -out server.crt    # 打包服务端的资料为pkcs12格式(非必要,只是换一种格式存储上一步生成的证书) 生成过程中,需要创建访问密码,请记录下来。openssl pkcs12 -export -in server.crt -inkey server.key -out server.pkcs12# 生成服务端的keystore(.jks文件, 非必要,Java程序通常使用该格式的证书) 生成过程中,需要创建访问密码,请记录下来。keytool -importkeystore -srckeystore server.pkcs12 -destkeystore server.jks -srcstoretype pkcs12# 把ca证书放到keystore中(非必要)keytool -importcert -keystore server.jks -file ca.crt

线程池

  • 多线程以及异常处理
    • 因为多线程的特性,所以异常只能在子线程中处理不能抛出到主线程里,但是 Spring实现的线程池可以返回一个异常信息对象

项目部署

生成指定文件

war

  • 部署为war必须的类,一般在创建项目时选war就会自动生成,选jar就要手动添加
public class ServletInitializer extends SpringBootServletInitializer {
@Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(DemoApplication.class); } }
  • maven: mvn war 即可 mvn package -DskipTests
  • gradle: gradle war 然后 gradle bootRepackage 即可

jar

  • 没有特殊的配置,打包即用
    • maven: mvn package 即可生成可执行的jar
    • gradle:gradle jar 然后 gradle bootRepackage 也生成可执行jar

构建docker镜像

方便监控应用状态,cpu 内存 流量

  • 先构建得到war或jar,然后根据dockerfile构建一个镜像
FROM frolvlad/alpine-oraclejdk8:slimADD weixin-1.0.0.war app.warENTRYPOINT ["java","-jar","/app.war"]

gradle结合docker

build.gradle

apply plugin: 'docker'task buildDocker(type: Docker, dependsOn: build) {    push = true    applicationName = jar.baseName    dockerfile = file('src/main/docker/Dockerfile')    doFirst {        copy {            from war            into stageDir        }    }}

Dockerfile

FROM frolvlad/alpine-oraclejdk8:slimVOLUME /tmpADD weixin-1.0.0.war app.warENTRYPOINT ["java","-jar","/app.war"]

转载地址:http://kjjio.baihongyu.com/

你可能感兴趣的文章
查看源代码Source not found及在eclipse中配置jdk的src.zip源代码
查看>>
uniGUI试用笔记(二)
查看>>
HOG特征-理解篇
查看>>
Microsoft.AlphaImageLoader滤镜解说
查看>>
extjs_02_grid(显示本地数据,显示跨域数据)
查看>>
超过响应缓冲区限制
查看>>
ubuntu 下安装 matplotlib
查看>>
webservice的几个简单概念
查看>>
spring Transaction Management --官方
查看>>
html5 canvas 奇怪的形状垂直渐变
查看>>
mac java环境
查看>>
SQL Server 2008 收缩日志(log)文件
查看>>
UICollectionView基础
查看>>
BZOJ2794 : [Poi2012]Cloakroom
查看>>
正确计算linux系统内存使用率
查看>>
[转载]SpringMVC的Model参数绑定方式
查看>>
Linux socket多进程服务器框架三
查看>>
Debug.print的用法
查看>>
常用名词
查看>>
第一百三十四节,JavaScript,封装库--遮罩锁屏
查看>>