1. 提問:怎麼讓一個接口經過不一樣的開發環境進行不一樣的sql操做?全文用以區分的配置文件以
spring.profiles.active
爲例程序員
首先,mapper層用spring註解@Value讀取配置文件是不行的。編譯不會錯,可是經過註解寫入的值必然爲空。面試
把配置文件讀到靜態參數上面,而後Provider讀取靜態參數spring
在main方法的SpringApplication.run()
以後,正好合適。sql
細心的同窗可能發現了這個方法實際上是有返回值的,返回了一個ConfigurableApplicationContext
類。數據庫
這個context指的即是sping上下文,進去查源碼,查看類描述編程
譯:由大多數(若是不是全部)應用程序上下文實現的SPl接口。除了Applicationcontext接口中的應用程序上下文客戶端方法外,還提供配置應用程序上下文的工具。這裏封裝了配置和生命週期方法,以免讓ApplicationContext客戶端代碼明顯看到它們。目前的方法應該只在啓動和關閉代碼中使用。設計模式
繼續從spring上下文裏找環境變量mybatis
譯:以可配置的形式返回此應用程序上下文的Environment,容許進一步定製。多線程
那麼咱們即可以從spring環境裏面取得想要的配置文件並寫入靜態變量了架構
那麼啓動程序看一下,是否得到到了
這時候又有同窗問了:「若是咱們的配置文件讀取了多個配置呢?這個string是否是就不乾淨啦?」
繼續細看這個類,這就是答案,把每一個激活的環境以集合的形式給你。
繼續編碼測試,這樣就有更完善的方案來解決了。
spring註解的方式是在spring實現加強類的時候,把值注入進去的。那麼值爲空的狀況就能夠大膽猜想了: mybatis調用Provider類時用的是類本類,因此獲取不到值。
驗證時刻:「類和類不能一律而論」
能夠看到該類調用了.newInstance()
方法
譯: 建立由class對象表示的類的新實例。類被實例化,就像經過帶有空參數列表的new表達式同樣。注意,該方法傳播由空構造函數拋出的任何異常,包括檢查的異常。使用此方法能夠有效地繞過編譯器執行的編譯時異常檢查。構造函數。newInstance方法經過將構造函數拋出的任何異常包裝在(checked)InvocationTargetException中來避免這個問題。
最後看到了
.newInstance()
方法,至少可以肯定,在使用Mybatis的時候操做Provider的時候必需要一個public的空參構造器。
對於程序員來講,要學習的知識內容、技術有太多太多,要想不被環境淘汰就只有不斷提高本身,歷來都是咱們去適應環境,而不是環境來適應咱們!
不用多說,相信你們都有一個共識:不管什麼行業,最牛逼的人確定是站在金字塔端的人。因此,想作一個牛逼的程序員,那麼就要讓本身站的更高,成爲技術大牛並非一朝一夕的事情,須要時間的沉澱和技術的積累。
如今競爭這麼激烈,只有經過不斷學習,提升本身,才能保持競爭力。
對於一些不知道學習什麼,沒有一個系統路線的程序員,這裏給你們提供一些學習資料
須要的小夥伴,能夠一鍵三連,點擊這裏獲取免費領取方式!
內容涵蓋:Java基礎、JVM、高併發、多線程、分佈式、設計模式、Spring全家桶、Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、MongoDB、Redis、MySQL、RabbitMQ、Kafka、Linux、Netty、Tomcat、數據庫、雲計算等
須要的小夥伴,能夠一鍵三連,點擊這裏獲取免費領取方式!