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))
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章