springBoot的引入

spring的發(fā)展

  • spring1.x

所有的配置都是通過xml文件配置bean竿秆,隨著項(xiàng)目的不斷擴(kuò)大绍绘,需要將xml配置分放到不同的配置文件中没卸,需要頻繁的在java與xml配置文件中切換

  • spring2.x

隨著jdk1.5帶來的注解支持戳晌,spring就可以使用注解bean進(jìn)行申明和注入泞辐,大大減少了xml配置文件笔横,同時也大大簡化了項(xiàng)目的開發(fā)
最佳實(shí)踐:
1.應(yīng)用的基本配置用xml,比如:數(shù)據(jù)源咐吼、資源文件等
2.業(yè)務(wù)開發(fā)用注解吹缔,比如:service中注入bean等

  • spring3.x到spring4.x

從spring3.x開始提供了java配置方式,使用java配置方式可以更好的理解你配置的bean,現(xiàn)在我們就處于這個時代锯茄,并且spring4.x和springBoot都推薦使用Java配置

spring的Java配置方式

Java配置是spring4.x推薦使用配置方式厢塘,完全替代xml配置

  • @Configuration和@Bean
    • @Configuration 作用于類上 ---- 相當(dāng)于一個xml文件
    • @Bean 作用于方法上 ---- 相當(dāng)與一個bean標(biāo)簽
  • 示例
    使用示例演示了通過Java配置方式進(jìn)行配置spring,并且實(shí)現(xiàn)springIOC功能
  1. 創(chuàng)建工程以及導(dǎo)入依賴
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>4.3.7.RELEASE</version>
        </dependency>
        <!-- 連接池 -->
        <dependency>
            <groupId>c3p0</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.1.2</version>
        </dependency>
  1. 編寫User對象
public class User {

    private String username;

    private String password;

    private Integer age;
}
  1. 編寫UserDao用于模板與數(shù)據(jù)庫的交互
public class UserDAO { 
    public List<User> queryUserList(){
        List<User> result = new ArrayList<User>();
        // 模擬數(shù)據(jù)庫的查詢
        for (int i = 0; i < 10; i++) {
            User user = new User();
            user.setUsername("username_" + i);
            user.setPassword("password_" + i);
            user.setAge(i + 1);
            result.add(user);
        }
        return result;
    }
}
  1. 編寫UserService 用于實(shí)現(xiàn)User數(shù)據(jù)操作業(yè)務(wù)邏輯
@Service
public class UserService {
    @Autowired // 注入Spring容器中的bean對象
    private UserDAO userDAO;

    public List<User> queryUserList() {
        // 調(diào)用userDAO中的方法進(jìn)行查詢
        return this.userDAO.queryUserList();
    }
}
  1. 編寫SpringConfig 用于實(shí)例化Spring容器
@Configuration //通過該注解來表明該類是一個Spring的配置肌幽,相當(dāng)于一個xml文件
@ComponentScan(basePackages = "cn.itcast.springboot.javaconfig") //配置掃描包
public class SpringConfig {    
    @Bean // 通過該注解來表明是一個Bean對象晚碾,相當(dāng)于xml中的<bean>
    public UserDAO getUserDAO(){
        return new UserDAO(); // 直接new對象做演示
    }
}
  1. 編寫測試方法,用于啟動spring容器
public class Main {    
    public static void main(String[] args) {
        // 通過Java配置來實(shí)例化Spring容器
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);  
        // 在Spring容器中獲取Bean對象
        UserService userService = context.getBean(UserService.class);        
        // 調(diào)用對象中的方法
        List<User> list = userService.queryUserList();
        for (User user : list) {
            System.out.println(user.getUsername() + ", " + user.getPassword() + ", " + user.getPassword());
        }        
        // 銷毀該容器
        context.destroy();
    }
}

讀取外部資源配置文件

通過@PropertySource可以指定讀取的配置文件牍颈,通過@Value注解獲取值迄薄,具體用法:

@Configuration //通過該注解來表明該類是一個Spring的配置,相當(dāng)于一個xml文件
@ComponentScan(basePackages = "cn.itcast.springboot.javaconfig") //配置掃描包
@PropertySource(value= {"classpath:jdbc.properties"})
public class SpringConfig {
    
    @Value("${jdbc.url}")
    private String jdbcUrl;
    
    @Bean // 通過該注解來表明是一個Bean對象煮岁,相當(dāng)于xml中的<bean>
    public UserDAO getUserDAO(){
        return new UserDAO(); // 直接new對象做演示
    }    
}
  • 如何配置多個配置文件


    image.png
  • 如果配置的配置文件不存在怎么辦


    image.png

配置數(shù)據(jù)庫連接池

  • 導(dǎo)入依賴
        <dependency>
            <groupId>c3p0</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.1.2</version>
        </dependency>
  • 之前的xml配置
<!-- 數(shù)據(jù)庫連接池 -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <!-- 配置連接池屬性 -->
        <property name="driverClass" value="${jdbc.driver}" />
        <property name="jdbcUrl" value="${jdbc.url}" />
        <property name="user" value="${jdbc.username}" />
        <property name="password" value="${jdbc.password}" />

        <!-- c3p0連接池的私有屬性 -->
        <property name="maxPoolSize" value="30" />
        <property name="minPoolSize" value="10" />
        <!-- 關(guān)閉連接后不自動commit -->
        <property name="autoCommitOnClose" value="false" />
        <!-- 獲取連接超時時間 -->
        <property name="checkoutTimeout" value="10000" />
        <!-- 當(dāng)獲取連接失敗重試次數(shù) -->
        <property name="acquireRetryAttempts" value="2" />
    </bean>
  • 參考xml配置改造成java配置方式
    @Value("${jdbc.url}")
    private String jdbcUrl;

    @Value("${jdbc.driverClassName}")
    private String jdbcDriverClassName;

    @Value("${jdbc.username}")
    private String jdbcUsername;

    @Value("${jdbc.password}")
    private String jdbcPassword;

    @Bean(destroyMethod = "close")
    public DataSource dataSource() {
        ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource();
        // 數(shù)據(jù)庫驅(qū)動
        comboPooledDataSource.setDriverClass(jdbcDriverClassName);
        // 相應(yīng)驅(qū)動的jdbcUrl
        comboPooledDataSource.setJdbcUrl(jdbcUrl);
        // 數(shù)據(jù)庫的用戶名
        comboPooledDataSource.setUsername(jdbcUsername);
        // 數(shù)據(jù)庫的密碼
        comboPooledDataSource.setPassword(jdbcUsername);
        // 檢查數(shù)據(jù)庫連接池中空閑連接的間隔時間讥蔽,單位是分涣易,默認(rèn)值:240,如果要取消則設(shè)置為0
        comboPooledDataSource.setIdleConnectionTestPeriodInMinutes(60);
        // 連接池中未使用的鏈接最大存活時間冶伞,單位是分新症,默認(rèn)值:60,如果要永遠(yuǎn)存活設(shè)置為0
        comboPooledDataSource.setIdleMaxAgeInMinutes(30);
        // 每個分區(qū)最大的連接數(shù)
        comboPooledDataSource.setMaxConnectionsPerPartition(100);
        // 每個分區(qū)最小的連接數(shù)    
        comboPooledDataSource.setMinConnectionsPerPartition(5);
        return comboPooledDataSource;
}

使用idea創(chuàng)建一個springBoot項(xiàng)目

springBoot和spring MVC的關(guān)系:
springBoot是MVC的升級版响禽,沒有必要的聯(lián)系

  • 微服務(wù)

spring cloud徒爹,基于springBoot

第一步.png

第二步.png

第三步.png

第四步.png

第五步.png

刪除紅色框內(nèi)的內(nèi)容,非必須刪除內(nèi)容芋类,只是沒有用到的內(nèi)容

  • springBoot的屬性配置

配置位置在src->main->resources->新建application.properties/application.yml
application.properties==application.yml
application.properties書寫起來較application.yml麻煩

server.port=8081(啟動端口)                                    /            server:
server.context-path=/exercise(啟動時的地址)                    /              port: 8081
                                                                             context-path: /exercise
  • application.yml
server:
  port: 8081
spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/dbgirl
    username: root
    password: root
jpa:
  hibernate:
    ddl-auto: create
  show-sql: true


  • 在配置文件中可以自定義要顯示的值

例如:
在yml文件中隆嗅,書寫

server:
  port: 8081
  cupSize: B
  age: 20
  context: "cupSize: ${cupSize},age: ${age}"

在自定義的文件中即可寫:

@Value("${cupSize}")
private 修飾符(String/Integer) cupSize;
  • 部分注解
    • 獲取前綴
@ConfigurationProperties(prefix="前綴名")
@Component 開啟配置
  • Controller的使用
@Controller 處理HTTP請求
@RestController spring4之后的新加注解,原來返回json需要@ResponseBody配合@Controller
@RequestMapping 配置url映射
@PathVariable 獲取url中的數(shù)據(jù)
@RequestParam 獲取請求參數(shù)的值
@GetMapping 組合注解
  • 事務(wù)
@Transactional
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末侯繁,一起剝皮案震驚了整個濱河市胖喳,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌贮竟,老刑警劉巖丽焊,帶你破解...
    沈念sama閱讀 211,348評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異咕别,居然都是意外死亡技健,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評論 2 385
  • 文/潘曉璐 我一進(jìn)店門惰拱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來雌贱,“玉大人,你說我怎么就攤上這事偿短∶毖浚” “怎么了?”我有些...
    開封第一講書人閱讀 156,936評論 0 347
  • 文/不壞的土叔 我叫張陵翔冀,是天一觀的道長。 經(jīng)常有香客問我披泪,道長纤子,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,427評論 1 283
  • 正文 為了忘掉前任款票,我火速辦了婚禮控硼,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘艾少。我一直安慰自己卡乾,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,467評論 6 385
  • 文/花漫 我一把揭開白布缚够。 她就那樣靜靜地躺著幔妨,像睡著了一般鹦赎。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上误堡,一...
    開封第一講書人閱讀 49,785評論 1 290
  • 那天古话,我揣著相機(jī)與錄音,去河邊找鬼锁施。 笑死陪踩,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的悉抵。 我是一名探鬼主播肩狂,決...
    沈念sama閱讀 38,931評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼姥饰!你這毒婦竟也來了傻谁?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,696評論 0 266
  • 序言:老撾萬榮一對情侶失蹤媳否,失蹤者是張志新(化名)和其女友劉穎栅螟,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體篱竭,經(jīng)...
    沈念sama閱讀 44,141評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡力图,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,483評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了掺逼。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吃媒。...
    茶點(diǎn)故事閱讀 38,625評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖吕喘,靈堂內(nèi)的尸體忽然破棺而出赘那,到底是詐尸還是另有隱情,我是刑警寧澤氯质,帶...
    沈念sama閱讀 34,291評論 4 329
  • 正文 年R本政府宣布募舟,位于F島的核電站,受9級特大地震影響闻察,放射性物質(zhì)發(fā)生泄漏拱礁。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,892評論 3 312
  • 文/蒙蒙 一辕漂、第九天 我趴在偏房一處隱蔽的房頂上張望呢灶。 院中可真熱鬧,春花似錦钉嘹、人聲如沸鸯乃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽缨睡。三九已至鸟悴,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間宏蛉,已是汗流浹背遣臼。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留拾并,地道東北人揍堰。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像嗅义,于是被迫代替她去往敵國和親屏歹。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,492評論 2 348

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理之碗,服務(wù)發(fā)現(xiàn)蝙眶,斷路器,智...
    卡卡羅2017閱讀 134,629評論 18 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,773評論 6 342
  • 1.1 spring IoC容器和beans的簡介 Spring 框架的最核心基礎(chǔ)的功能是IoC(控制反轉(zhuǎn))容器褪那,...
    simoscode閱讀 6,702評論 2 22
  • 1.1 Spring IoC容器和bean簡介 本章介紹了Spring Framework實(shí)現(xiàn)的控制反轉(zhuǎn)(IoC)...
    起名真是難閱讀 2,577評論 0 8
  • 注:2012年8月4日龍泉寺法會 期間幽纷,僧俗一堂誦讀經(jīng)文,兩日一夜博敬,吃素齋友浸,住深山, 干活偏窝,聽經(jīng)收恢,蕩滌心靈, 暫避...
    隱一而隱閱讀 199評論 0 4