2019 第一周 開發筆記
- 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
搜索資料後:
翻譯一段: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))
2019 第一周 開發筆記