springboot提供了許多啟動器starter,大部分的啟動器都有配置屬性,這些配置屬性一般可以在這里找到:
xxxxxxxx-autoconfigure-xxxxx.jar/META-INF/spring-configuration-metadata.json
application.properties
# 這些屬性是否生效取決於對應的組件是否聲明為 Spring 應用程序上下文里的 Bean(基本是自動配置的), # 為一個不生效的組件設置屬性是沒有用的。 ################ 文件上傳 ################ # 開啟上傳支持, 默認是true spring.servlet.multipart.enabled=true # 最大文件大小, 單位MB, 默認是1MB spring.servlet.multipart.max-file-size=1MB # 最大請求大小, 單位MB, 默認是10MB spring.servlet.multipart.max-request-size=10MB # 文件上傳位置 spring.servlet.multipart.location=/upload # 大於該值的文件會被寫到磁盤上, 單位B, 默認是0B spring.servlet.multipart.file-size-threshold=0B ################ 服務器配置 ################ # 服務器地址 server.address=127.0.0.1 # 端口號, 默認是8080 server.port=8080 # 應用上下文路徑 server.servlet.context-path=/appContext # servlet 上下文參數 # server.servlet.context-parameters.[param name] = [param value] server.servlet.context-parameters.email = lin@m ################ mvc配置 ################ # 異步請求處理超時前的等待時間(單位為毫秒)。 # 如果沒有設置該屬性,則使用底層實現 的默認超時時間, # 比如,Tomcat 上使用 Servlet 3 時超時時間為 10 秒 spring.mvc.async.request-timeout= # 要使用的日期格式 spring.mvc.date-format=dd/MM/yyyy # 開啟 favicon.ico 的解析 spring.mvc.favicon.enabled=true # 在重定向的場景下,是否要忽略“默認”模型對象的內容, 默認是true spring.mvc.ignore-default-model-on-redirect=true # 要使用的地域配置 spring.mvc.locale=zh_CN # 消息代碼格式 spring.mvc.message-codes-resolver-format=prefix_error_code # Spring MVC 視圖前綴 spring.mvc.view.prefix= # Spring MVC 視圖后綴 spring.mvc.view.suffix= ################ jsp-servlet配置 ################ # 針對 jsp 使用的 Servlet 類名, 默認是 org.apache.jasper.servlet.JspServlet # 需要tomcat-embed-jasper依賴 server.servlet.jsp.class-name=org.apache.jasper.servlet.JspServlet # JspServlet 是否要注冊到內嵌的 Servlet 容器里, 默認是true server.servlet.jsp.registered=true # Jsp Servlet 初始化參數 # server.servlet.jsp.init-parameters.[param name] = [param value] server.servlet.jsp.init-parameters.userName = myName ################ Session配置 ################ # 會話 Cookie 的域 server.servlet.session.cookie.domain=www.lin.com # Cookie 注釋 server.servlet.session.cookie.comment=購物信息 # Cookie 最大保存時間, 單位s server.servlet.session.cookie.max-age=10s # Cookie 名稱 server.servlet.session.cookie.name=carts # Cookie 的訪問路徑 server.servlet.session.cookie.path=/page/ # Cookie安全性設置, true表示cookie無法通過document.cookie讀取到cookie信息,這樣能有效的防止XSS攻擊 server.servlet.session.cookie.http-only=true # Cookie安全性設置, true表示cookie只能用https協議發送給服務器,用http協議是不發送的 server.servlet.session.cookie.secure=true # Session過期時間, 默認是30分鍾 server.servlet.session.timeout=30m # Session是否持久化, 默認是false server.servlet.session.persistent=false # 本地的session數據存放地址 server.servlet.session.store-dir= # Session的追蹤模式 # SessionTrackingMode下有三種可選值:COOKIE, URL, SSL server.servlet.session.tracking-modes = COOKIE, URL ################ Tomcat配置 ################ # 創建日志文件的目錄, 默認是logs server.tomcat.accesslog.directory=logs # 是否開啟訪問日志, 默認是false server.tomcat.accesslog.enabled=false # 訪問日志的格式, 默認是common server.tomcat.accesslog.pattern=common # 日志名前綴, 默認是access_log server.tomcat.accesslog.prefix=access_log # 日志后綴名, 默認是.log server.tomcat.accesslog.suffix=.log # 用來解碼 URI 的字符編碼, 默認是UTF-8 server.tomcat.uri-encoding=UTF-8 # 最小備用線程數,tomcat啟動時的初始化的線程數。 server.tomcat.min-spare-threads=10 # tomcat可創建的最大的線程數,每一個線程處理一個請求,超過這個請求數后, # 客戶端請求只能排隊,等有線程釋放才能處理。 server.tomcat.max-threads=200 # 最長等待時間,如果沒有數據進來,等待一段時間后斷開連接,釋放線程。 server.tomcat.connection-timeout=5000 ################ Cache配置 ################ # 如果底層緩存管理器支持緩存名的話,可以在這里指定要創建的緩存名列表,用逗號分隔。 # 通常這會禁用運行時創建其他額外緩存的能力。 spring.cache.cache-names= # 用來初始化 EhCache 的配置文件位置 spring.cache.ehcache.config=classpath:ehcache.xml # 緩存類型,默認根據環境自動檢測 spring.cache.type=ehcache ################ data配置 ################ # 開啟 JPA 倉庫, 默認是true spring.data.jpa.repositories.enabled=true ###=== spring.data.mongodb ===### # 身份認證數據庫名 spring.data.mongodb.authentication-database= # 數據庫名 spring.data.mongodb.database= # 要使用的 FieldNamingStrategy 的全限定名 spring.data.mongodb.field-naming-strategy=org.springframework.data.mapping.model.CamelCaseAbbreviatingFieldNamingStrategy # GridFS 數據庫名稱 spring.data.mongodb.grid-fs-database= # MongoDB 服務器地址 spring.data.mongodb.host= # 端口號 spring.data.mongodb.port= # MongoDB 賬號 spring.data.mongodb.username= # MongoDB 密碼 spring.data.mongodb.password= spring.data.mongodb.repositories.type=auto # Mongo 數據庫 URI。設置了該屬性后就主機和端口號會被忽略。 # (默認值: mongodb:// localhost/test) spring.data.mongodb.uri=mongodb://localhost/test ###=== spring.data.rest ===### # 用於發布倉庫資源的基本路徑 spring.data.rest.base-path= # 分頁數據的默認頁大小 spring.data.rest.default-page-size= # 最大分頁大小 spring.data.rest.max-page-size= # 用於標識一次返回多少記錄的 URL 查詢字符串參數名。默認值:size spring.data.rest.limit-param-name= # URL 查詢字符串參數的名稱,用來標識返回哪一頁。默認值:page spring.data.rest.page-param-name= # 在創建實體后是否返回一個響應體 spring.data.rest.return-body-on-create= # 在更新實體后是否返回一個響應體 spring.data.rest.return-body-on-update= # URL 查詢字符串參數的名稱,用來表示結果排序的方向。 spring.data.rest.sort-param-name= ###=== spring.data.solr ===### # Solr 的主機地址。如果設置了 zk-host 則忽略該屬性。 spring.data.solr.host=http://127.0.0.1:8983/solr # 開啟 solr 倉庫, 默認是true spring.data.solr.repositories.enabled=true # 主機地址, 格式為HOST:PORT spring.data.solr.zk-host= ################ DataSource配置 ################ # 數據庫的 JDBC URL spring.datasource.url= # 數據庫的登錄密碼 spring.datasource.password= # 數據庫的登錄用戶名 spring.datasource.username= # JDBC 驅動的全限定類名。默認根據 URL 自動檢測 spring.datasource.driver-class-name=com.mysql.jdbc.Driver # 數據源名稱 spring.datasource.name= # DML的SQL文件位置 spring.datasource.data=classpath:all.sql # 執行DML操作的用戶名 spring.datasource.data-username= # 執行DML操作的密碼 spring.datasource.data-password= # 數據源類型 spring.datasource.type=com.alibaba.druid.pool.DruidDataSource # 初始化數據庫時發生錯誤是否終止 spring.datasource.continue-on-error=true # 是否隨機生成數據源名稱 spring.datasource.generate-unique-name=true # Schema(數據定義語言,Data Definition Language,DDL)腳本資源的引用。 spring.datasource.schema=classpath:create.sql # SQL 初始化腳本里的語句分割符。默認是; spring.datasource.separator=; # 執行DDL操作的用戶名 spring.datasource.schema-username= # 執行DDL操作的密碼 spring.datasource.schema-password= # SQL 腳本的編碼 spring.datasource.sql-script-encoding=UTF-8 # Platform to use in the DDL or DML scripts # (such as schema-${platform}.sql or data-${platform}.sql) spring.datasource.platform=all # JNDI location of the datasource. Class, url, username & password are ignored when set spring.datasource.jndi-name= # Whether to enable JMX support (if provided by the underlying pool) # 默認是false spring.datasource.jmx-enabled=false ###=== hikari datasource配置 ===### # 指定必須保持連接的最小值 spring.datasource.hikari.minimum-idle= # 數據庫密碼 spring.datasource.hikari.password= # 數據庫用戶名 spring.datasource.hikari.username= # 指定連接池名字 spring.datasource.hikari.pool-name= # 更新操作是否自動提交 spring.datasource.hikari.auto-commit=true # 指定數據源的全限定名 spring.datasource.hikari.data-source-class-name= # 指定driver的類名,默認從jdbc url中自動探測 spring.datasource.hikari.driver-class-name= # 指定JDBC URL spring.datasource.hikari.jdbc-url= # 連接池中的連接能保持閑置狀態的最長時間,單位為毫秒 spring.datasource.hikari.idle-timeout= # 指定連接的超時時間,毫秒單位 spring.datasource.hikari.connection-timeout= # 指定連接池最大的連接數,包括使用中的和空閑的連接 spring.datasource.hikari.maximum-pool-size= # 使用Hikari connection pool時,多少毫秒檢測一次連接泄露 spring.datasource.hikari.leak-detection-threshold= # 指定校驗連接合法性執行的sql語句 spring.datasource.hikari.connection-test-query= # 連接的默認事務隔離級別 spring.datasource.hikari.transaction-isolation= # 在連接驗證失敗前等待的超時時間,單位為秒 spring.datasource.hikari.validation-timeout= # 是否允許池暫停(pool suspension)。在開啟池暫停后會有性能會受到一定影響, # 除非你真的需要這個功能(例如在冗余的系統下),否則不要開啟它。 spring.datasource.hikari.allow-pool-suspension=true # 默認的 Catalog 名稱 spring.datasource.hikari.catalog= # 在所有新連接創建時都會執行的 SQL 語句,該語句會在連接加入連接池前執行 spring.datasource.hikari.connection-init-sql= # 指定jndi的地址 spring.datasource.hikari.data-source-j-n-d-i= # 使用Hikari connection pool時,指定要設置的屬性 # spring.datasource.hikari.data-source-properties.[key] spring.datasource.hikari.data-source-properties.keyp=aaa # 使用Hikari connection pool時,在心跳檢查時傳遞的屬性 # spring.datasource.hikari.health-check-properties.[key] spring.datasource.hikari.health-check-properties.loopv=123 spring.datasource.hikari.health-check-registry= # 初始化失敗的超時時間 spring.datasource.hikari.initialization-fail-timeout= # 指定內部查詢是否要被隔離 spring.datasource.hikari.isolate-internal-queries=true # 指定連接數據庫的超時時間 spring.datasource.hikari.login-timeout= # 指定連接池中連接的最大生存時間,毫秒單位 spring.datasource.hikari.max-lifetime= spring.datasource.hikari.metric-registry= spring.datasource.hikari.metrics-tracker-factory= # 當使用Hikari connection pool時,是否標記數據源只讀 spring.datasource.hikari.read-only= # 指定Hikari connection pool是否注冊JMX MBeans spring.datasource.hikari.register-mbeans= spring.datasource.hikari.scheduled-executor= spring.datasource.hikari.schema= ################ FreeMarker配置 ################ # HttpServletRequest 的屬性是否允許覆蓋(隱藏)控制器生成的同名模型屬性 spring.freemarker.allow-request-override= # HttpSession 的屬性是否允許覆蓋(隱藏)控制器生成的同名模型屬性 spring.freemarker.allow-session-override= # 開啟模板緩存 spring.freemarker.cache=false # 模板編碼, 默認是UTF-8 spring.freemarker.charset=UTF-8 # 檢查模板位置是否存在 spring.freemarker.check-template-location=true # 開啟 FreeMarker 的 MVC 視圖解析 spring.freemarker.enabled=true ################ H2配置 ################ # 開啟控制台 spring.h2.console.enabled=true # 可以找到控制台的路徑 spring.h2.console.path=/h2-console spring.h2.console.settings.trace=true spring.h2.console.settings.web-allow-others=true ################ Http配置 ################ # HTTP 消息轉換時優先使用 JSON 映射器 spring.http.converters.preferred-json-mapper=jackson # HTTP 請求和響應的字符集。如果沒有顯式地指定 Content-Type 頭,則將該屬性值作為 這個頭的值 spring.http.encoding.charset=UTF-8 # 開啟 HTTP 編碼支持, 默認是true spring.http.encoding.enabled=true # 強制將 HTTP 請求和響應編碼為所配置的字符集, 默認是true spring.http.encoding.force=true ################ Jackson配置 ################ # 日期格式字符串或日期格式類的全限定類名 spring.jackson.date-format=yyyy-MM-dd HH:mm:ss # 在序列化時控制屬性是否也進行序列化 spring.jackson.default-property-inclusion=non_empty # 是否開啟Jackson的反序列化 # spring.jackson.deserialization.[key]= spring.jackson.deserialization.accept-float-as-int=true # 是否開啟json的generators # spring.jackson.generator.[key]= spring.jackson.generator.auto-close-json-content=true # 指定Joda date/time的格式,比如yyyy-MM-ddHH:mm:ss. 如果沒有配置的話,dateformat會作為backup spring.jackson.joda-date-time-format= # 指定json使用的Local(語言) spring.jackson.locale=zh_CN # 是否開啟Jackson通用的特性 # spring.jackson.mapper.[key]= spring.jackson.mapper.accept-case-insensitive-enums=true # 是否開啟jackson的parser特性 # spring.jackson.parser.[key]= spring.jackson.parser.allow-backslash-escaping-any-character=true # 指定PropertyNamingStrategy(CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES) # 或者指定PropertyNamingStrategy子類的全限定類名 spring.jackson.property-naming-strategy=LOWER_CAMEL_CASE # 是否開啟jackson的序列化 # spring.jackson.serialization.[key]= spring.jackson.serialization.fail-on-empty-beans=true # 指定日期格式化時區,比如America/Los_Angeles或者GMT+10 spring.jackson.time-zone= ################ Jpa配置 ################ # 要操作的目標數據庫,默認自動檢測 spring.jpa.database=mysql spring.jpa.database-platform=org.hibernate.dialect.MySQL5Dialect # 啟動時是否要初始化 Schema spring.jpa.generate-ddl=true # hibernate. hbm2ddl.auto 屬性的一個快捷方式。 # 在使用嵌入式數據庫時,默認為 create-drop , 其他情況下默認為 none 。 spring.jpa.hibernate.ddl-auto=update # 命名策略的全限定類名 spring.jpa.hibernate.naming.physical-strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy # 注冊 OpenEntityManagerInViewInterceptor, 在請求的整個處理過程中, # 將一個 JPA EntityManager 綁定到線程上。 spring.jpa.open-in-view=true spring.jpa.mapping-resources= # JPA 提供方要設置的額外原生屬性 # spring.jpa.properties.[key] # 打開 SQL 語句日志 spring.jpa.show-sql=true spring.jpa.hibernate.use-new-id-generator-mappings=true ################ mail配置 ################ # 默認的 MimeMessage 編碼 spring.mail.default-encoding=UTF-8 # SMTP 服務器主機地址 spring.mail.host= # SMTP 服務器的登錄密碼 spring.mail.password= # SMTP 服務器的登錄用戶名 spring.mail.username= # SMTP 服務器的端口號 spring.mail.port= # 附加的 JavaMail 會話屬性 # spring.mail.properties.[key] # SMTP 服務器用到的協議, 默認是smtp spring.mail.protocol=smtp # 在啟動時測試郵件服務器是否可用 spring.mail.test-connection=true
這里對server.tomcat進行解釋:
- 前綴為server的配置項,對應的配置類為org.springframework.boot.autoconfigure.web.ServerProperties,ServerProperties類中有一個內部類Tomcat,對應前綴為server.tomcat的配置項。
- 項目啟動時,這些配置會被set到org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory類中(引入spring-boot-starter-web依賴,會自動引入spring-boot-starter-tomcat,就是說tomcat是系統默認的容器,所以會自動初始化),之后TomcatEmbeddedServletContainerFactory.getEmbeddedServletContainer()創建並啟動Tomcat容器實例。
- Tomcat內部使用的是java.util.concurrent.ThreadPoolExecutor線程池,容器啟動時會在org.apache.tomcat.util.net.AbstractEndpoint.createExecutor()這里創建線程池,所以其中最大最小線程數、線程創建、銷毀和分配的策略其實都是ThreadPoolExecutor的特性。