继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Springboot企业级开发教程:新手入门与实战

翻过高山走不出你
关注TA
已关注
手记 254
粉丝 31
获赞 67
概述

Spring Boot企业级开发教程涵盖了从环境搭建到项目实战的全过程,帮助开发者快速入门并掌握Spring Boot的核心概念和应用。文章详细介绍了配置文件管理、常用组件集成以及项目打包部署的方法,旨在帮助读者构建稳定可靠的企业级应用。

Spring Boot企业级开发教程:新手入门与实战
Spring Boot简介与环境搭建

Spring Boot的核心概念

Spring Boot是一个基于Spring框架的快速开发工具,旨在简化新Spring应用的初始搭建以及开发过程。Spring Boot通过约定优于配置的原则,自动装配所需的功能,使开发者能够专注于核心业务。

核心概念

  1. 自动配置:Spring Boot通过注解@SpringBootApplication,自动配置Spring应用。这种自动配置简化了传统Spring项目的XML配置。
  2. 起步依赖:在pom.xmlbuild.gradle中,通过添加特定的起步依赖(例如spring-boot-starter-web),Spring Boot会自动引入一系列依赖,使你能够快速构建Web应用。
  3. 内置Web服务器:Spring Boot自带嵌入式的Tomcat、Jetty或Undertow服务器,使应用能够直接运行,无需外部服务器。
  4. 外部化配置:支持多种形式的外部化配置,如环境变量、命令行参数、YAML或Java系统属性。

开发环境搭建

安装JDK

首先,确保你已经在本地计算机上安装了JDK。你可以从Oracle官网或者OpenJDK下载最新版本的JDK,并按照官方文档进行安装。

配置IDE

推荐使用IntelliJ IDEA或Eclipse。这两种IDE都有很好的Spring Boot插件,可以帮助你更高效地进行开发。以下是配置IDE的具体步骤:

IntelliJ IDEA配置步骤:

  1. 打开IntelliJ IDEA,选择File -> New -> Project。
  2. 在New Project对话框中,选择Spring Boot,点击Next。
  3. 选择Spring Boot版本和项目名称,点击Next。
  4. 在新建项目向导中,选择所需的功能模块,如Web、Security、Data JPA等。
  5. 点击Finish完成配置。

Eclipse配置步骤:

  1. 打开Eclipse,选择File -> New -> Project。
  2. 选择Spring Boot,点击Next。
  3. 在新建项目向导中,选择所需的功能模块,如Web、Security、Data JPA等。
  4. 点击Finish完成配置。

安装构建工具

Spring Boot项目通常使用Maven或Gradle作为构建工具。以下是安装Maven和Gradle的命令:

# 安装Maven
sudo apt-get install maven

# 安装Gradle
sudo apt-get install gradle

创建第一个Spring Boot项目

使用Spring Initializr创建一个Spring Boot项目。Spring Initializr是一个网页工具,可以在线创建Spring Boot项目。

  1. 访问Spring Initializr
  2. 选择项目类型,例如Maven ProjectGradle Project
  3. 选择语言(Java)和版本。
  4. 添加所需的依赖,例如Spring Web
  5. 输入项目基本信息,例如GroupArtifact
  6. 点击Generate按钮,下载项目压缩包。
  7. 解压后,使用IDE打开项目。

创建第一个Spring Boot应用

创建一个简单的HelloWorld应用,展示Spring Boot的基本用法。

  1. src/main/java目录下创建包结构,例如com.example.demo
  2. 在该包下创建主类HelloWorldApplication.java
package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
public class HelloWorldApplication {

    public static void main(String[] args) {
        SpringApplication.run(HelloWorldApplication.class, args);
    }
}

@RestController
class HelloWorldController {
    @GetMapping("/")
    public String hello() {
        return "Hello World!";
    }
}
  1. 运行HelloWorldApplication类中的main方法,启动应用。
  2. 打开浏览器访问http://localhost:8080,应该能看到Hello World!的输出。
Spring Boot基础配置

配置文件详解(application.properties/application.yml)

Spring Boot使用application.propertiesapplication.yml文件进行配置。这些配置文件通常位于src/main/resources目录下。

application.properties 示例

# 每个应用的端口
server.port=8080

# 数据库连接配置
spring.datasource.url=jdbc:mysql://localhost:3306/yourdb
spring.datasource.username=root
spring.datasource.password=secret
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

# 静态资源配置
spring.web.resources.static-locations=classpath:/static/,classpath:/public/

application.yml 示例

server:
  port: 8080

spring:
  datasource:
  url: jdbc:mysql://localhost:3306/yourdb
  username: root
  password: secret
  driver-class-name: com.mysql.cj.jdbc.Driver
web:
 resources:
  static-locations: classpath:/static/,classpath:/public/

自动配置原理

Spring Boot的自动配置通过@SpringBootApplication注解实现。该注解是一个组合注解,由@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan组成。

  • @SpringBootConfiguration:标记该类是一个配置类。
  • @EnableAutoConfiguration:启用自动配置。
  • @ComponentScan:扫描包下的所有组件。

自动配置示例

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

配置文件的热更新与Profile

配置文件热更新

Spring Boot支持配置文件的热更新。这意味着在应用运行时,修改配置文件后,无需重启应用,配置就会立即生效。

Profile切换

Spring Boot支持多环境配置。你可以通过配置文件的命名(如application-dev.properties)或运行时参数(--spring.profiles.active=dev)来选择不同的Profile。

# application-dev.yml
spring:
  profiles:
   active: dev
Spring Boot常用组件介绍

Spring MVC与RESTful API构建

Spring Boot内置了对Spring MVC的支持,使开发RESTful API变得简单。

RESTful API示例

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

@RestController
class UserController {
    @GetMapping("/users")
    public List<User> getAllUsers() {
        // 返回所有用户列表
        return userService.getAllUsers();
    }
}

数据库集成(JDBC、MyBatis、JPA等)

JDBC示例

package com.example.demo;

import javax.sql.DataSource;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;

@ConfigurationProperties("spring.datasource")
public class DataSourceConfig {
    @Bean
    public DataSource dataSource() {
        // 配置DataSource
        return DataSourceBuilder.create()
                .driverClassName(driverClassName)
                .url(url)
                .username(username)
                .password(password)
                .build();
    }
}

MyBatis示例

package com.example.demo;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
@MapperScan("com.example.demo.mapper")
public class MyBatisConfig {
    @Bean
    public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
        SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
        factoryBean.setDataSource(dataSource);
        return factoryBean.getObject();
    }
}

集成Spring Security实现安全配置

Spring Security配置示例

package com.example.demo.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
            .antMatchers("/resources/**").permitAll()
            .anyRequest().authenticated()
            .and()
            .formLogin()
            .loginPage("/login")
            .permitAll()
            .and()
            .logout()
            .permitAll();
    }
}
日志与监控

日志配置与管理

Spring Boot支持多种日志框架,如Logback、Log4j2和Java Util Logging。默认使用Logback进行日志记录。

日志配置示例

logging:
 level:
  root: INFO
  org.springframework.web: DEBUG

应用监控与指标收集

Spring Boot提供了一个内置的Actuator模块,可以用来监控应用的状态和收集指标。

监控示例

可以通过/actuator端点来查看应用的状态信息。

management:
 endpoints:
  web:
   exposure:
    include: "*"

异常处理与日志记录

异常处理示例

package com.example.demo.config;

import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;

@ControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(value = Exception.class)
    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    @ResponseBody
    public String handleException(Exception e) {
        // 记录异常信息
        logger.error("An error occurred", e);
        return "An internal error occurred";
    }
}
实战案例:构建一个简单的企业级应用

用户管理模块

用户管理类

package com.example.demo.service;

import com.example.demo.entity.User;
import org.springframework.stereotype.Service;

@Service
public class UserService {
    public User getUserById(Long id) {
        // 模拟数据库操作
        return new User(id, "Jane Doe", "user@example.com");
    }
}

用户管理Controller

package com.example.demo.controller;

import com.example.demo.entity.User;
import com.example.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {
    @Autowired
    private UserService userService;

    @GetMapping("/users/{id}")
    public User getUser(@PathVariable Long id) {
        return userService.getUserById(id);
    }
}

订单模块

订单管理类

package com.example.demo.service;

import com.example.demo.entity.Order;
import org.springframework.stereotype.Service;

@Service
public class OrderService {
    public Order createOrder(Order order) {
        // 模拟数据库操作
        order.setId(1L);
        return order;
    }
}

订单管理Controller

package com.example.demo.controller;

import com.example.demo.entity.Order;
import com.example.demo.service.OrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class OrderController {
    @Autowired
    private OrderService orderService;

    @PostMapping("/orders")
    public Order createOrder(@RequestBody Order order) {
        return orderService.createOrder(order);
    }
}

权限控制模块

安全配置示例

package com.example.demo.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
            .antMatchers("/users").permitAll()
            .antMatchers("/orders").hasRole("ADMIN")
            .anyRequest().authenticated()
            .and()
            .formLogin()
            .loginPage("/login")
            .permitAll()
            .and()
            .logout()
            .permitAll();
    }

    @Override
    @Bean
    public UserDetailsService userDetailsService() {
        UserDetails user = User.withDefaultPasswordEncoder()
            .username("user")
            .password("password")
            .roles("USER")
            .build();

        UserDetails admin = User.withDefaultPasswordEncoder()
            .username("admin")
            .password("password")
            .roles("ADMIN")
            .build();

        return new InMemoryUserDetailsManager(user, admin);
    }
}
项目打包与部署

Maven/Gradle项目构建

Maven构建项目

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 <modelVersion>4.0.0</modelVersion>

 <groupId>com.example</groupId>
 <artifactId>demo</artifactId>
 <version>0.0.1-SNAPSHOT</version>
 <packaging>jar</packaging>

 <name>demo</name>
 <description>Demo project for Spring Boot</description>

 <parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-parent</artifactId>
  <version>2.4.2</version>
  <relativePath/> <!-- lookup parent from repository -->
 </parent>

 <properties>
  <java.version>1.8</java.version>
 </properties>

 <dependencies>
  <dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-web</artifactId>
  </dependency>
  <dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-data-jpa</artifactId>
  </dependency>
  <dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-security</artifactId>
  </dependency>
  <dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-actuator</artifactId>
  </dependency>
  <dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-test</artifactId>
   <scope>test</scope>
  </dependency>
  <dependency>
   <groupId>mysql</groupId>
   <artifactId>mysql-connector-java</artifactId>
   <scope>runtime</scope>
  </dependency>
 </dependencies>

 <build>
  <plugins>
   <plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
   </plugin>
  </plugins>
 </build>
</project>

Gradle构建项目

plugins {
 id 'org.springframework.boot' version '2.4.2'
 id 'io.spring.dependency-management' version '1.0.11.RELEASE'
 id 'java'
}

group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'

repositories {
 mavenCentral()
}

dependencies {
 implementation 'org.springframework.boot:spring-boot-starter-web'
 implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
 implementation 'org.springframework.boot:spring-boot-starter-security'
 implementation 'org.springframework.boot:spring-boot-starter-actuator'
 testImplementation 'org.springframework.boot:spring-boot-starter-test'
 runtimeOnly 'mysql:mysql-connector-java'
}

应用打包为可执行的jar文件

使用Maven构建可执行的jar文件:

mvn clean package

使用Gradle构建可执行的jar文件:

./gradlew bootJar

应用部署至Tomcat或云平台

部署到Tomcat

将打包好的jar文件上传至Tomcat服务器,然后运行:

java -jar demo-0.0.1-SNAPSHOT.jar

部署到云平台

你可以将应用部署到云平台,如阿里云、腾讯云等。云平台通常提供一键部署功能,简化了部署流程。

通过以上步骤,你已经掌握了Spring Boot的基本概念和实践,可以开始构建自己的企业级应用了。如果你需要更深入的学习,可以参考慕课网提供的Spring Boot课程。

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP