Spring Cloud和Spring boot的相關問題

1.      環境變量 spring.profiles.active=development,設置值的不同,在autoconfiguration設置了不同的管理員帳號和密碼。如果當前的是開發環境,帳號和密碼都是admin;如果是非開發環境當前的密碼爲Change_And_Encrypt_It_Or_Override_It_In_Env。

2.      Swagger 中的Data Types列表中,type和format列同時指定確定字段類型(缺省format除外)。生成的model 類中,字段的類型以format的內容爲準。設置變量類型無法轉換時,日誌會給出具體的字段的類型。

3.      H2內存數據庫:http://localhost:8080/h2-console/login.jsp。application.yml文件中的相關屬性需要設置。

TODO:在fire中,當前data.sql中的insert語法執行不成功,數據無法插入。

JDBC URL---jdbc:h2:mem:testdb

已解決。需要在application.yml文件中配置,以下項:

    spring.datasource.initialize:true

 spring.jpa.hibernate.ddl-auto:none

另外,在classpath根目錄下,如果數據插入在data.sql文件中,此時的ddl-auto屬性的值不能爲drop或create-drop。如果是ddl-auto的屬性爲drop或create-drop此時的數據插入SQL應該位於import.sql文件中。

4.      集成測試中的問題:stackoverflow.com網站有相應的問題描述和解答,連接如下

http://stackoverflow.com/questions/38883819/issue-with-org-springframework-beans-factory-unsatisfieddependencyexception

在進行集成測試,模塊mockMVC需要用到內存數據庫時,出現如下的錯誤:

org.springframework.beans.factory.UnsatisfiedDependencyException:Error creating bean with name'org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration':Unsatisfied dependency expressed through constructor parameter 0; nested exceptionis org.springframework.beans.factory.BeanCreationException: Error creating beanwith name 'dataSource' defined in class path resource[org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Tomcat.class]:Initialization of bean failed; nested exception isorg.springframework.beans.factory.BeanCreationException: Error creating beanwith name 'dataSourceInitializer': Invocation of init method failed; nestedexception isorg.springframework.jdbc.datasource.init.ScriptStatementFailedException: Failed toexecute SQL script statement #1 of URL[file:/E:/MavenDemos/fire/target/classes/schema.sql]: CREATE TABLEPRODUCT ( PRODUCT_ID CHARACTER (5), DESCRIPTION CHARACTER (50) ); nestedexception is org.h2.jdbc.JdbcSQLException: Table "PRODUCT" already exists;SQL statement:

CREATE TABLE PRODUCT ( PRODUCT_ID CHARACTER (5),DESCRIPTION CHARACTER (50) ) [42101-193]

其中,一個錯誤的根源就是最後的nestedexception is org.h2.jdbc.JdbcSQLException: Table"PRODUCT" already exists; SQL statement:

CREATE TABLE PRODUCT ( PRODUCT_ID CHARACTER (5), DESCRIPTIONCHARACTER (50) )

很明顯的是表已經存在。再往前找,導致這個原因的癥結是在Failedto execute SQL script statement #1 of URL[file:/E:/MavenDemos/fire/target/classes/schema.sql]描述的schema.sql文件的問題,文件中的sql語句要創建表,而此時表已經存在,故會發生錯誤和導致Surefire/Failsafe插件的goal執行失敗。

總結:日誌文件能夠很好的發現問題根源,並且對問題的追溯也很精準。導致問題的原因一般都是在描述的尾部。

5.      查看相關文檔,分析RAML和APIBlue兩者對範型是否支持:(與Swagger的不支持的比較)。

當前的理解:是否支持範型是在代碼的生成後的DTO模型中是否有範型類的生成,因爲有了範型類的生成,在Controller處理返回的結果類型可以爲範型類的某個具體實例,從而減少變成的複雜性。

就目前而言,在apiblueprint的API定義的語法層面,能夠實現範型相似類型的定義。但具體用法還在考察中。

6.      自動重啓配置spring-boot-devtools,參考鏈接:

http://blog.javachen.com/2016/02/22/devtools-in-spring-boot.html

http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#using-boot-devtools-restart[官方鏈接]

CLASSPATH中文件有變化時,會自動重啓應用。主要是當用戶編寫的java文件發生改變時,此時如果使用的是IDE會自動的重新編譯文件。spring-boot-devtools模塊會監測到這種變化,然後重啓應用,比較便於開發人員的調試。

然而,在不使用IDE僅使用maven進行應用的構建時,因爲maven不會自動編譯java代碼,因而不會自動重啓。可以同過在新的docs窗口,使用mvn compile命令手動便以java代碼,以觸發模塊的自動重啓功能。

還可以進行其它配置選擇,比如排除靜態資源文件/添加額外的觀察路徑/關閉自動重啓/使用一個觸發文件/自定義自動重啓類加載器等。

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