SpringBoot+Mybatis+RocketMQ+SpringCloud(⼀,Spr。。。
简单说下⾃⼰⽬前的理解:springBoot是对spring的升级,为什么升级?因为各种语⾔发展到现在,已经⾮常⽅便了。但是java,甚⾄是spring都需要⼤量的jar包,编译,然后放⼊tomcat/apache中去执⾏,上线也需要很多。但是如果使⽤springBoot,就可以使⽤它⾃动⽣成的相当于main函数的,直接运⾏。上线,也变得简单。(待写)
特点:
1. 创建独⽴的Spring应⽤程序
2. 嵌⼊的Tomcat,⽆需部署WAR⽂件
3. 简化Maven配置
4. ⾃动配置Spring
5. 提供⽣产就绪型功能,如指标,健康检查和外部配置
6. 绝对没有代码⽣成并且对XML也没有配置要求
SpringBoot其实就相当于⼀个库:简单理解就是springboot并不是什么新型的框架,⽽是整合了spring,springmvc等框架,默认了很多配置,从⽽减少了开发者的开发时间。需要什么就去maven.
下⾯,请开始你的表演。
基础结构说明:src/main/java.是下的程序⼊⼝,spring-boot会⾃动加载启动类所在包下及其⼦包下的所有组件.。
src/main/resources:配置⽂件
src/test/java:测试⼊⼝
必须先说明两点:①必须加web依赖,不是web项⽬,启动不了;②由于加⼊依赖Mybatis,需要加上注解保证能扫描到(当然也可以application.properties中添加数据库信息)。另外也可能是其他的原因:properties⽂件没有被扫描到,需要在pom⽂件中添加,来保证⽂件都能正常被扫描到并且加载成功.
这⾥说明下注解:
@SpringBootApplication // Springboot的核⼼ 全局注解,
可以看到这是⼀个注解接⼝包含⾃动扫描和开启⾃动配置
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {
@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM,
classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {
/**
* Exclude specific auto-configuration classes such that they will never be applied.
* @return the classes to exclude
*/
@AliasFor(annotation = EnableAutoConfiguration.class) //开启⾃动配置
Class<?>[] exclude() default {};
/**
* Exclude specific auto-configuration class names such that they will never be
* applied.
* @return the class names to exclude
* @since 1.3.0
*/
springboot结构@AliasFor(annotation = EnableAutoConfiguration.class)
String[] excludeName() default {};
/**
* Base packages to scan for annotated components. Use {@link #scanBasePackageClasses} * for a type-safe alternative to String-based package names.
* @return base packages to scan
* @since 1.3.0
*/
@AliasFor(annotation = ComponentScan.class, attribute = "basePackages") //⾃动扫描String[] scanBasePackages() default {};
/**
* Type-safe alternative to {@link #scanBasePackages} for specifying the packages to
* scan for annotated components. The package of each class specified will be scanned.
* <p>
* Consider creating a special no-op marker class or interface in each package that
* serves no purpose other than being referenced by this attribute.
* @return base packages to scan
* @since 1.3.0
*/
@AliasFor(annotation = ComponentScan.class, attribute = "basePackageClasses")
Class<?>[] scanBasePackageClasses() default {};
}
依赖查看:Dependencies可查看有那些依赖;Dependency hierarchy可查看每⼀个依赖包含的内容。从下⾯可以看到已经导⼊很多的包。
更改端⼝号:(及运⾏结果)
测试controller;
ample.demo;
//import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
// 复合注解 @RestController注解:其实就是@Controller和@ResponseBody注解加在⼀起
// 复合注解
@RestController
//@EnableAutoConfiguration
@RequestMapping(value = "/demo")
public class HelloController {
@RequestMapping("/test")
String index() {
return "nihao!zhouyi";
}
}
启动项⽬:结果如下:(纠结了⼀天终于解决了)
但是这其中有很多坑:
①报错端⼝⽆端被占⽤,只能是在配置⽂件中改端⼝或者cmd命令查看端⼝并在任务管理器中关闭对应的PID,(重启端⼝被占⽤的根本原因查看⽇志可以发现⼀次启动却启动了两次tomcat,这是因为项⽬部署的tomcat没有移除的原因)---------这⾥告诉我⼀个道理,分析⽇志可以解决很多问题。
②报错This application has no explicit mapping for /error, so you are seeing this as a fallback.
查了很多⽹上的⽅法:(但是都没有解决我的问题)
出现这个异常说明了跳转页⾯的url⽆对应的值.
原因1:
Application启动类的位置不对.要将Application类放在最外侧,即包含所有⼦包
原因:spring-boot会⾃动加载启动类所在包下及其⼦包下的所有组件.
原因2:
在springboot的配置⽂件:l或application.properties中关于视图解析器的配置问题:
当pom⽂件下的spring-boot-starter-paren版本⾼时使⽤:
spring.mvc.view.prefix/spring.mvc.view.suffix
当pom⽂件下的spring-boot-starter-paren版本低时使⽤:
spring.view.prefix/spring.view.suffix
原因3:
控制器的URL路径书写问题
@RequestMapping(“xxxxxxxxxxxxxx”)
实际访问的路径与”xxx”不符合.
原因4:
我在这⾥补充我⾃⼰问题:是因为我原先启动的项⽬是由tomcat去运⾏的。然⽽SpringBoot的项⽬是不需要这个,因为SpringBoot本⾝嵌⼊了Tomcat,前⾯已经说过()。上⾯的两个问题都是由这个原因引起的,解决⽅式:请删除本地的Tomcat部署。
测试测试类Tests
// 以classes = SpringBootDemoApplication.class为基础做单元测试,在⾥⾯写测试内容即可。@RunWith(SpringRunner.class)
@SpringBootTest(classes = SpringBootDemoApplication.class)
public class SpringBootDemoApplicationTests {
@Test
public void contextLoads() {
}
}
ample.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
// Springboot的核⼼全局注解
@SpringBootApplication(exclude= {DataSourceAutoConfiguration.class})
@EnableSwagger2 //加上注解@EnableSwagger2 表⽰开启Swagger,这个注解不可少public class SpringBootDemoApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootDemoApplication.class, args);
}
}
Swagger2配置类
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论