不廢話,直接上代碼,
Nacos搭建的微服務,可以看 https://www.cnblogs.com/hanjun0612/p/17867349.html
一,pom文件
spring-cloud-starter-alibaba-nacos-discovery 和 spring-cloud-starter-openfeign
都是基於spring-cloud-alibaba-dependencies
版本爲:2022.0.0.0
<!-- mybatis--> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.4.1</version> </dependency> <!-- pojo持久化使用 --> <dependency> <groupId>jakarta.persistence</groupId> <artifactId>jakarta.persistence-api</artifactId> <version>3.1.0</version> </dependency> <!-- https://mvnrepository.com/artifact/com.mysql/mysql-connector-j --> <dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> <version>8.2.0</version> </dependency> <!-- druid數據源 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.2.20</version> </dependency> <!-- 引入alibaba-nacos-discovery依賴,發現服務 --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <!-- 引入alibaba-nacos-config依賴,可以從Nacos配置中心獲得配置信息 --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency>
二,修改Nacos的配置文件
配置了druid
spring: datasource: username: root password: root url: jdbc:mysql://localhost:3306/test1?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC driver-class-name: com.mysql.cj.jdbc.Driver type: com.alibaba.druid.pool.DruidDataSource initialSize: 5 minIdle: 5 maxActive: 20 maxWait: 60000 timeBetweenEvictionRunsMillis: 60000 minEvictableIdleTimeMillis: 300000 validationQuery: SELECT 1 FROM DUAL testWhileIdle: true testOnBorrow: false testOnReturn: false poolPreparedStatements: true filters: stat,wall,log4j maxPoolPreparedStatementPerConnectionSize: 20 useGlobalDataSourceStat: true connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500 name: hello world! mybatis-plus: configuration: map-underscore-to-camel-case: false
三,配置model,dao,controller
演示就不創建service了。
model
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import java.io.Serializable; @Data @NoArgsConstructor @AllArgsConstructor public class User implements Serializable { @TableId(value = "id",type = IdType.AUTO) private Integer id; @TableField(value = "name") private String name; @TableField(value = "schoolId") private Integer schoolId; }
dao
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.kintech2.test.model.User; import org.apache.ibatis.annotations.Mapper; @Mapper public interface UserDao extends BaseMapper<User> { }
controller
import com.alibaba.nacos.api.model.v2.Result; import com.kintech2.test.mapper.UserDao; import com.kintech2.test.model.User; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("api/test") @RefreshScope public class ApiTestController { @Autowired private UserDao userDao; @RequestMapping(value = "test2", method = RequestMethod.GET) @ResponseBody public Result test2(Integer id){ User user=userDao.selectById(id); return Result.success(user.getName()); } }
四,配置Druid的監控
由於最新版本druid,還使用的javax.servlet,此處無法匹配jakarta.servlet。
所以目前要等druid更新,因此註釋此配置類
import com.alibaba.druid.support.http.StatViewServlet; import com.alibaba.druid.support.http.WebStatFilter; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.boot.web.servlet.ServletRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import jakarta.servlet.Filter; import jakarta.servlet.Servlet; /** * 新版本Druid的監控還使用javax,無法匹配jakarta */ @Configuration public class DruidConfig { @Bean @ConditionalOnMissingBean public ServletRegistrationBean<Servlet> druidServlet() { ServletRegistrationBean<Servlet> servletRegistrationBean = new ServletRegistrationBean<Servlet>(new StatViewServlet(), "/druid/*"); //白名單: servletRegistrationBean.addInitParameter("allow", "127.0.0.1"); //IP黑名單 (存在共同時,deny優先於allow) : 如果滿足deny的話提示:Sorry, you are not permitted to view this page. // servletRegistrationBean.addInitParameter("deny", "192.168.1.119"); //登錄查看信息的賬號密碼, 用於登錄Druid監控後臺 servletRegistrationBean.addInitParameter("loginUsername", "admin"); servletRegistrationBean.addInitParameter("loginPassword", "admin"); //是否能夠重置數據. servletRegistrationBean.addInitParameter("resetEnable", "true"); return servletRegistrationBean; } /** * 註冊Filter信息, 監控攔截器 * * @return */ @Bean @ConditionalOnMissingBean public FilterRegistrationBean<Filter> filterRegistrationBean() { FilterRegistrationBean<Filter> filterRegistrationBean = new FilterRegistrationBean<Filter>(); filterRegistrationBean.setFilter(new WebStatFilter()); //添加過濾規則. filterRegistrationBean.addUrlPatterns("/*"); //添加不需要忽略的格式信息. filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"); return filterRegistrationBean; } }
五,測試