2019 第一周 开发笔记

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))

猜你喜欢

转载自blog.51cto.com/12005608/2340355