2019.1.7

  • Spring Boot中使用@Async实现异步调用
    java.lang.IllegalStateException: Failed to load ApplicationContext
    @Async Demo 报错

  • ThreadPoolTaskExecutor
    public Executor taskExecutor() {
            ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
            executor.setCorePoolSize(10);
            executor.setMaxPoolSize(20);
            executor.setQueueCapacity(200);
            executor.setKeepAliveSeconds(60);
            executor.setThreadNamePrefix("taskExecutor-");
            executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
            return executor;
    }

    核心线程数10:线程池创建时候初始化的线程数
    最大线程数20:线程池最大的线程数,只有在缓冲队列满了之后才会申请超过核心线程数的线程
    缓冲队列200:用来缓冲执行任务的队列
    允许线程的空闲时间60秒:当超过了核心线程出之外的线程在空闲时间到达之后会被销毁
    线程池名的前缀:设置好了之后可以方便我们定位处理任务所在的线程池
    线程池对拒绝任务的处理策略:这里采用了CallerRunsPolicy策略,当线程池没有处理能力的时候,该策略会直接在 execute 方法的调用线程中运行被拒绝的任务;如果执行程序已关闭,则会丢弃该任务
    setWaitForTasksToCompleteOnShutdown(true)该方法就是这里的关键,用来设置线程池关闭的时候等待所有任务都完成再继续销毁其他的Bean,这样这些异步任务的销毁就会先于Redis线程池的销毁。同时,这里还设置了setAwaitTerminationSeconds(60),该方法用来设置线程池中任务的等待时间,如果超过这个时候还没有销毁就强制销毁,以确保应用最后能够被关闭,而不是阻塞住。


  • 启动maven打的jar包 报错
    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaAutoConfiguration.class]: Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException
    在idea环境下跑项目没有问题 不知道为什么命令启动方式就报错
    搜索资料后:
    翻译一段:JAXB api被认为是Java EE api,因此不再包含在Java SE 9默认的类路径。在Java中11他们完全从JDK中删除。
    加入下方依赖后解决问题 Java启动jar包成功
    
    javax.xml.bind
    jaxb-api
    2.3.0
    

    那么为什么idea下成功java执行jar包会失败呢? 猜测:idea配置的jdk版本为1.8 而本地默认jdk版本是11


  • 记录一下最简单的投产上线的方式
    如果你使用的是maven来管理项目,执行以下命令既可以

1.cd 项目跟目录(和pom.xml同级)
mvn clean package
或者执行下面的命令
排除测试代码后进行打包
mvn clean package -Dmaven.test.skip=true
2.把jar包放到服务器上
3.打包完成后jar包会生成到target目录下,命名一般是 项目名+版本号.jar
启动jar包命令
java -jar target/spring-boot-scheduler-1.0.0.jar
重启:
ps -ef|grep java
##拿到对于Java程序的pid
kill -9 pid
##再次重启
Java -jar xxxx.jar


  • 服务器安装java 环境
    jdk
    下载Linux环境下的jdk1.8,请去(官网)中下载jdk的安装文件;
    1 由于我的Linux是64位的,因此我下载jdk-8u131-linux-x64.tar.gz。http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.tar.gz
    如果Linux本身连接到互联网,我们可以直接通过wget命令直接把JDK安装包下载下来
    要是没有外网的环境,还是安装上面的方法下载安装包,然后上传到服务器当中
    解压命令进行解压
    2 $ tar -zxvf jdk-8u131-linux-x64.tar.gz
    3 修改环境变量
    用vim编辑器来编辑profile文件,在文件末尾添加一下内容
    export JAVA_HOME=/usr/local/src/jdk1.8.0_131
    export JRE_HOME=${JAVA_HOME}/jre
    export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH
    export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
    export PATH=$PATH:${JAVA_PATH}
    然后,保存并退出(按:esc+Q+wq!)
    保存完之后,我们还需要让这个环境变量配置信息里面生效,要不然只能重启电脑生效了。
    通过命令source /etc/profile让profile文件立即生效
    ①、使用javac命令,不会出现command not found错误
    ②、使用java -version,出现版本为java version "1.8.0_131"
    ③、echo $PATH,看看自己刚刚设置的的环境变量配置是否都正确
    maven
    1wget http://mirror.bit.edu.cn/apache/maven/maven-3/3.6.0/binaries/apache-maven-3.6.0-bin.tar.gz
    下载最新maven安装包
    2tar vxf apache-maven-3.6.0-bin.tar.gz
    解压缩
    3然后配置环境变量,执行 vim /etc/profile 打开环境变量配置文件,在PATH后追加: :$MAVEN_HOME/bin
    然后在最后添加两行代码,设置maven安装目录
    MAVEN_HOME=/usr/local/maven/apache-maven-3.3.9
    export MAVEN_HOME
    4mvn -v
    jekins
    http://www.ityouknow.com/springboot/2017/11/11/springboot-jenkins.html 参考纯洁的微笑文章
    在下载过程中SSH Slaves 一直下载失败 跳过了。

    2019.1.8

  • spring cloud 注册eureka注册服务消费者 报错
    Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com.example.demo.Feign.SchedualServiceHi': FactoryBean threw exception on object creation; nested exception is java.lang.NullPointerException
    待解决。重新建项目没有此问题

  • 修改 varchar类型字段长度
    ALTER TABLE 表名 modify 字段名 类型(varchar(101))

    2019.1.9

  • docker部署springboot项目(最简易)
    在项目中增加依赖略过
    安装 Docker 环境
    安装JDK
    安装MAVEN
    https://www.cnblogs.com/ityouknow/p/8599093.html
    纯洁的微笑教程
    需要补充的是需要在pom文件目录下执行mvn package docker:build
    dockerfile在pom文件下目录要匹配
    遇到的问题
    The goal you specified requires a project to execute but there is no POM in 没有在pom文件目录下执行命令
    java.lang.Exception: No runnable methodsbr/>这是因为在单测方法前没有加@Test。。。
    启动成功

  • mac idea状态栏开启方式/切换jdk版本/以及开发环境跑不起来原因/
    1 选项栏view-toolbar
    2 2019 第二周 开发笔记
    点击右边第三个按钮-project Settings-project 就可以切换版本了
    3 项目开发环境里有rabbitmq消息队列,报错连不上,可以手边有两台电脑,另一台跑项目无问题,一下就想到了跑不起来这台电脑是开着***。。。。

  • mysql连接问题
    Wed Jan 09 22:36:00 CST 2019 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
    Wed Jan 09 22:36:02 CST 2019 WARN: Caught while disconnecting...

EXCEPTION STACK TRACE:
BEGIN NESTED EXCEPTION

javax.net.ssl.SSLException
MESSAGE: closing inbound before receiving peer's close_notify

STACKTRACE:

javax.net.ssl.SSLException: closing inbound before receiving peer's close_notify
1.在数据库连接的url中添加useSSL=false;
2.url中添加useSSL=true,并且提供服务器的验证证书。
如果只是做一个测试的话,没必要搞证书那么麻烦啦,在连接后添加一个useSSL=false即可,例如:
spring.datasource.url=jdbc:mysql://localhost:3306/project?useSSL=false&useUnicode=true&characterEncoding=UTF-8


  • 实体类序列化问题
    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'controller': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userRepository': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Not a managed type: class com.example.demo.entity.User

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userRepository': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Not a managed type: class com.example.demo.entity.User

Caused by: java.lang.IllegalArgumentException: Not a managed type: class com.example.demo.entity.User
at org.hibernate.jpa.internal.metamodel.MetamodelImpl.managedType(MetamodelImpl.java:210) ~[hibernate-entitymanager-5.0.12.Final.jar:5.0.12.Final]

缺少实体类序列化 public class User implements Serializable

2019.1.10

2019.1.11

一上班项目跑不起来 eureka连接不上。。maven clean /install 好使了 下次一定先试这个方法 耽误了半小时。。哎

继续dockerDemo
jpa连接数据库报错:
org.hibernate.InstantiationException: No default constructor for entity: :com.example.demo.entity.User
没有实体的默认构造函数 居然犯了这种错误 。只写了一个有参构造函数

自定义filter
import javax.servlet.*;
public class MyFilter implements Filter {}

@ControllerAdvice
拦截异常 做处理

配置swagger

配置log

配置 Actuator

docker查看对应容器日志
ocker logs -f -t --since="2017-05-31" --tail=10 edu_web_1
--since : 此参数指定了输出日志开始日期,即只输出指定日期之后的日志。
-f : 查看实时日志
-t : 查看日志产生的日期
-tail=10 : 查看最后的10条日志。
edu_web_1 : 容器名称