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包成功<dependency> <groupId>javax.xml.bind</groupId> <artifactId>jaxb-api</artifactId> <version>2.3.0</version> </dependency>
那么为什么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))