SpringBoot

springboot集成redis主-从模式+哨兵机制 springboot集成redis主-从模式 一、环境准备 (硬件资源:Linux+redis-5.0.3+springboot project) 需redis 3.0以上安装包,这里面以redis-5.0.3为示例。 下面讲解在一台linux上模拟1主、2从、3哨兵的主从模式(实际应用中应需3台服务器,其中一台放1主和1哨兵,另外两台放1从1哨兵)。 redis安装这里不做介绍,解压tar... 阅读详情

文章目录

1 SpringBoot介绍

1.1 SpringBoot基本概念

Spring Boot是其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。

1.2 回顾Spring的IOC,DI,AOP

IOC:
IOC(Inversion of Control),意为“控制反转”,也叫依赖注入(Dependency Injection),也有人认为依赖注入是控制反转的一种方式。IoC的本质是引入代理者以减少依赖关系
DI:
DI—Dependency Injection(依赖注入):是组件之间依赖关系由容器在运行期决定。通俗的说,由容器动态的将某个依赖关系注入到组件之中
AOP:
AOP:Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术
主要的功能是:日志记录,性能统计,安全控制,事务处理,异常处理等等

2 Spring的注解配置

2.1 Anno配置IOC

2.1.1 创建Spring的配置类
/**
 * Spring的配置类 相当于是:applicationContext.xml
 * @Configuration :Spring的配置标签,标记改类是Spring的配置类
 */
@Configuration
public class ApplicationConfig {
}
2.1.2 在配置类中定义Bean
/**
 * Spring的配置类 相当于是:applicationContext.xml
 * @Configuration :Spring的配置标签,标记改类是Spring的配置类
 */
@Configuration
public class ApplicationConfig {

    /**
     * @Bean : Spring的bean的定义标签 ,标记方法返回的对象交给Spring容器管理
     */
    @Bean
    public MyBean myBean(){
        return new MyBean();
    }

}
2.1.3 测试

加载配置类,获取容器,获取MyBean

@Test
public void test(){
    //加载配置文件,拿到Spring容器
    ApplicationContext applicationContext = new AnnotationConfigApplicationContext(ApplicationConfig.class);

    //通过容器获取Mybaean
    MyBean bean = applicationContext.getBean(MyBean.class);
    System.out.println(bean);
}

2.2 ComponentScan&ComponentScans自动扫描

2.2.1 准备MyBean帖@Component
@Component
public class MyBean {
}
2.2.2 创建配置类,@ComponentScan
@Configuration
//@ComponentScans
@ComponentScan("包名")
public class ApplicationConfig {
}

ComponentScan是ioc组件自动扫描,相当于是 context:component-scan base-package=*

默认扫描当前包,及其子包 ;

ComponentScan.lazyInit :懒初始化

ComponentScan.excludeFilters :排除’
注意:如果使用了自动扫描 ,那么配置类中就不要去配置@Bean

2.2.3 bean的详解
  • bean的id: 方法名
  • bean的name:可以通过 @Bean标签的name属性指定
  • 生命周期方法:initMethod , destroyMethod
  • 单利多利: @Scope(“prototype”)
  • 懒初始化: @Lazy
 @Bean(name="" , initMethod ="" ,destroyMethod="" )
 //@Scope("prototype")
 //@Lazy
 public MyBean myBean(){
 	return new MyBean();
 }

2.3 依赖注入

2.3.1手动定义bean的方式

直接通过调方法的方式注入bean,或者通过参数注入bean

2.3.2 自动扫描定义bean的方式

使用 @Autowired注入

/**
     * @Bean : Spring的bean的定义标签 ,标记方法返回的对象交给Spring容器管理
     *  bean的id:  方法名 myBean
     *  bean的name:可以通过 @Bean标签的name属性指定
     *  生命周期方法:initMethod , destroyMethod
     *  单利多利: @Scope("prototype")
     */
    @Bean(initMethod = "init" , destroyMethod = "destroy")
    public MyBean myBean(OtherBean otherBean){
        MyBean myBean = new MyBean();
        myBean.setName("娃娃");
        //myBean.setOtherBean(otherBean());
        myBean.setOtherBean(otherBean);
        return myBean ;
    }

    @Bean
    //@Lazy
    public OtherBean otherBean(){
        return new OtherBean();
    }

2.4 条件Conditional

Conditional注解帖在bean的定义方法上来判断,如果不满足条件就不会定义bean

2.4.1 在Bean的定义方法帖@Conditional
 @Bean
    @Conditional(value = MyCondition.class)
    public MyBean windowsMyBean(){
        return new MyBean("windowMyBean");
    }
    @Bean
    @Conditional(value = LinuxCondition.class)
    public MyBean linuxMyBean(){
        return new MyBean("linuxMyBean");
    }
2.4.2 定义条件类
public class MyCondition implements Condition {

    /**
     * 匹配方法,返回值决定是否满足条件
     */
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
        //获取系统环境
        String systemName = context.getEnvironment().getProperty("os.name");

        if("Windows 10".equals(systemName)){
            return true;
        }
        return false;
    }
}

2.5 Import

2.5.1 直接导入Bean或者配置类
@Configuration
@Import(ApplicationOtherConfig.class)	//导入其他的配置类
public class ApplicationConfig{}
2.5.2 导入ImportSelector

定义ImportSelector

public class MyImportSelector implements ImportSelector {

    //选择导入,该方法返回我们需要导入的类的全限定名
    public String[] selectImports(AnnotationMetadata importingClassMetadata) {
        return new String[]{
                "cn.itsource._07_import_selector.MyBean",
                "cn.itsource._07_import_selector.OtherBean"};
    }
}
@Configuration
@Import(MyImportSelector.class)	//导入选择器
public class ApplicationConfig{}
2.5.3 导入ImportBeanDefinitionRegistrar

定义ImportBeanDefinitionRegistrar

public class MyBeanRegistor implements ImportBeanDefinitionRegistrar {
    //注册bean , BeanDefinitionRegistry :注册bean的注册器
    public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {

        //参数:beanName :bean的名字
        RootBeanDefinition rootBeanDefinition = new RootBeanDefinition(MyBean.class);
        registry.registerBeanDefinition("myBean",rootBeanDefinition );
    }
}
@Configuration
@Import(MyBeanRegistor.class)	//导入bean注册器
public class ApplicationConfig{}

2.6 FactoryBean

通过工厂定义bean

2.6.1 定义FactoryBean
public class MyBeanFactoryBean implements FactoryBean<MyBean> {
    public MyBean getObject() throws Exception {
        return new MyBean();
    }

    public Class<?> getObjectType() {
        return MyBean.class;
    }

    public boolean isSingleton() {
        return true;
    }
}
2.6.2 配置 MyBeanFactoryBean的bean定义
@Configuration
public class ApplicationConfig {

    @Bean
    public MyBeanFactoryBean myBean(){
        return new MyBeanFactoryBean();
    }
}
2.6.3 测试
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes ={ ApplicationConfig.class})
public class AnnoTest {
    @Autowired
    private MyBean myBean;

    @Test
    public void test(){
        System.out.println(myBean);
    }
}

2.7 Bean生命周期

2.7.1 Bean+InitMethod+DestoryMethod
@Bean(InitMethod="" , DestoryMethod="")
2.7.2 InitializingBean, DisposableBean
public class MyBean implements InitializingBean, DisposableBean {
    public MyBean(){
        System.out.println("创建.............");
    }
    public void destroy() throws Exception {
        System.out.println("destroy方法...........");
    }
    public void afterPropertiesSet() throws Exception {
        System.out.println("初始化方法...........");
    }
}
2.7.3 PostConstruct+PreDestroy
@Component
public class MyBean {

    @PostConstruct
    public void init(){
        System.out.println("init.....");
    }
    @PreDestroy
    public void destory(){
        System.out.println("destory.....");
    }
}
2.7.4 BeanPostProcessor后置处理器
@Component
public class MyBeanPostProcessor implements BeanPostProcessor {

    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("初始化之前.....:"+bean);
        return bean;
    }

    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("初始化之后.....:"+bean);
        return bean;
    }
}

3 SpringBoot-HelloWorld

3.1 HelloWorld

3.1.1 HelloWorld-web应用
<parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-parent</artifactId>
  <version>2.0.5.RELEASE</version>
</parent>
...
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
</dependency>
3.1.2 创建配置类
@SpringBootApplication
public class ApplicationConfig {

    public static void main(String[] args) {
        SpringApplication.run(ApplicationConfig.class);
    }
}
3.1.3 编写Controller
@Controller
public class Example {

	@RequestMapping("/")
	@ResponseBody
	String home() {
		return "Hello World!";
	}
}

3.2 HelloWorld-web应用分析

3.2.1 相关配置详解
  • spring-boot-starter-parent :SpringBoot的父工程,帮我们管理了很多的基础jar包
  • spring-boot-starter-web :SpringBoot和SpringMvc整合的jar包,并且导入了日志,tomcat,等等相关的jar包
  • RestController : Controller+ResponseBody
  • @EnableAutoConfiguration : 开启自动配置功能
  • SpringApplication.run : 启动SpringBoot应用
  • <packaging>jar</packaging> :SpringBoot应用默认打jar包
  • SpringBootApplication:包括三个标签组成
    @SpringBootConfiguration - @Configuration : Spring的配置标签
    @EnableAutoConfiguration :开启自动配置
    @ComponentScan:组件自动扫描
    dependencyManagement
    该标签下的jar包,默认是不能被子项目直接使用的 , 他只有声明的功能 , 如果只项目想用这里标签里面的jar包 ,需要显示的写出来 ,而版本号使用父工程的。达到版本号统一管理的效果
    dependencies
    这个标签下面的jar包默认会被子项目直接继承直接使用
3.2.2 SpringBoot自动配置分析

@EnableAutoConfiguration开启自动配置功能 ,
@EnableAutoConfiguration ->
AutoConfigurationImportSelector ->
spring-boot-autoconfigure-2.0.5.RELEASE.jar ->
spring.factories - EnableAutoConfiguration ->
在程序启动的过程中,加载 EnableAutoConfiguration 节点下的自动配置的类,完成相关的自动配置

4 SpringBoot的特点

  1. 使用注解配置,无需xml
  2. 快速搭建,开发
  3. 简化的maven
  4. 方便和第三方框架集成
  5. 内嵌tomcat,部署简单
  6. 内置健康检查,监控等
  7. 自动配置,让配置更简单

5 SpringBoot的基本使用

5.1 项目结构

src
	--main
		--java
		--resources
			--static		//静态资源目录
			--templates		//模板页面目录,如:jsp ,ftl
			--application.properties/application.yml	//默认配置文件

在这里插入图片描述

5.2 打包运行

5.2.1 导入打包插件
<build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
    </plugins>
  </build>
5.2.2 打包

打包命令会把jar打包到target目录
在这里插入图片描述

5.2.3 运行
java -jar xxx.jar

5.3 热部署

5.3.1 导入依赖
 <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-devtools</artifactId>
 </dependency>
5.3.2 编译代码

ctrl + F9

5.3.3 配置IDEA的自动编译功能

配置setting的自动编译
在这里插入图片描述
按 ctrl +shift + alt + / -> registry

5.4 yml基本语法

多个级之间用:分类,并且换行缩进 , 值不用换行 , 值前面有个空格
在这里插入图片描述

5.5 SpringBoot读取配置

5.5.1 使用@Value标签

配置文件

user:
  username: ls
  password: 456
  age: 99

绑定配置的对象

@Component
public class User {

    //@Value :从配置文件中取值   SPEL
    @Value("${user.username}")
    private String username = "zs";

    @Value("${user.password}")
    private String password = "123";

    @Value("${user.age}")
    private int age = 18;
    . . . . . .
}
5.5.2 使用@ConfigurationProperties

配置文件

employee:
  username: ls
  password: 456
  age: 99

绑定配置的对象

@Component
@ConfigurationProperties(prefix = "employee")
public class Employee {
    private String username = "zs";
    private String password = "123";
    private int age = 18;
}

@ConfigurationProperties : 自动的根据前缀从配置中过滤出配置项目,然后根据当前对象的列名进行匹配,自动赋值

5.6 多环境配置切换

5.6.1 方式一
spring:
  profiles:
    active: test	#激活(选择)环境test
---
spring:
  profiles: dev		#指定环境名字dev
server:
  port: 9999
---
spring:
  profiles: test	#指定环境名字test
server:
  port: 8888
5.6.2 方式二

通过配置文件的名字来识别环境
配置三个yml文件
application-dev.yml

server:
  port: 9999

application-test.yml

server:
  port: 8888

application.yml

spring:
  profiles:
    active: test 
    #根据文件名字配置 application-dev.properties

5.7 日志的使用

5.7.1 基本使用
private Logger logger = LoggerFactory.getLogger(MySpringBootTest.class);

...
 logger.error("我是一个error日志.....");
 logger.warn("我是一个warn日志.....");
 logger.info("我是一个info日志.....");

logger.debug("我是一个debug日志.....");
logger.trace("我是一个trace日志.....");
5.7.2 配置日志
#logging.level.cn.itsource=error
#logging.file=my.txt
#logging.file.max-size=1KB
#logging.pattern.console="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n"
5.7.3 指定配置文件配置logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!-- 定义常量 : 日志格式 -->
    <property name="CONSOLE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} ----> [%thread] ---> %-5level %logger{50} - %msg%n"/>
    <!--ConsoleAppender 用于在屏幕上输出日志-->
    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
        <!--定义控制台输出格式-->
        <encoder>
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
            <!-- 设置字符集 -->
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    <!--打印到文件-->
    <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>logs/springboot.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>logs/springboot-%d{yyyyMMdd}-%i.log.gz</fileNamePattern>
            <maxFileSize>1KB</maxFileSize>
            <maxHistory>30</maxHistory>
            <!--总上限大小-->
            <totalSizeCap>5GB</totalSizeCap>
        </rollingPolicy>
        <!--定义控制台输出格式-->
        <encoder>
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
            <!-- 设置字符集 -->
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    <!--root是默认的logger 这里设定输出级别是debug-->
    <root level="info">
        <!--定义了两个appender,日志会通过往这两个appender里面写-->
        <appender-ref ref="stdout"/>
        <appender-ref ref="file"/>
    </root>
    <!--如果没有设置 additivity="false" ,就会导致一条日志在控制台输出两次的情况-->
    <!--additivity表示要不要使用rootLogger配置的appender进行输出-->
    <logger name="cn.itsource" level="error" additivity="false">
        <appender-ref ref="stdout"/>
        <appender-ref ref="file"/>
    </logger>
</configuration>

5.8 SpringBoot集成Thymeleaf

5.8.1 导入依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
5.8.2 创建模板 resources/templates/hello.html
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>成功!</h1>
    <!--使用语法th:text 将div里面的文本内容设置为 -->

    <div th:text="${msg}">这是显示欢迎信息</div>
</body>
</html>
5.8.3 编写controller
@Controller
public class HelloController {
    @RequestMapping("/index")
    public String hello(Model model){
        model.addAttribute("msg","后面有人,认真听课" );
        return "hello";
    }
}
5.8.4 编写主配置类
5.8.5 Thymeleaf的自动配置原理

@EnableAutoConfiguration 开启自动配置功能,通过一个AutoConfigurationImportSelector导入选择器去扫描 spring-boot-autoconfigure-2.0.5.RELEASE.jar 自动配置包下面的 spring.factories 文件中的很多很多的自动配置的类
而:ThymeleafAutoConfiguration 是的Thymeleaf的自动配置 ,在这个自动配置类里面通过一个ThymeleafProperties去读取配置文件中的配置(也有默认配置) ,来自动配置Thymeleaf,比如Thymeleaf的视图解析器的自动配置如下:

@Bean
@ConditionalOnMissingBean(name = "thymeleafViewResolver")
public ThymeleafViewResolver thymeleafViewResolver() {
	ThymeleafViewResolver resolver = new ThymeleafViewResolver();
	...
	return resolver;
}
5.8.5 Thymeleaf的语法

${…} : 变量表达式。
{…} : 选择表达式。
#{…} : 消息 (i18n) 表达式。
@{…} : 链接 (URL) 表达式。
~{…} : 片段表达式

5.9 静态资源

5.9.1 静态资源目录

resource/static

5.9.2 webjars

导入jquery依赖 ( http://www.webjars.org/)

<dependency>
    <groupId>org.webjars</groupId>
    <artifactId>jquery</artifactId>
    <version>3.4.1</version>
</dependency>

导入jquery的js

<script src="/webjars/jquery/3.4.1/jquery.js"></script>
5.9.3 首页

resources/index.html

5.9.4 首页头顶图标

resources/favicon.ico

5.9.5 控制台图案

在resources下创建banner.txt文件夹,里面放图案
在这里插入图片描述

5.10 SpringBoot中的MVC配置

5.10.1 配置拦截器

定义拦截器

@Component
public class MyHandlerInterceptor extends HandlerInterceptorAdapter {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("preHandle................:"+request.getRequestURI());
        return super.preHandle(request, response, handler);
    }
}

注册拦截器

@SpringBootApplication
public class ApplicationConfig implements WebMvcConfigurer {

    @Autowired
    private MyHandlerInterceptor myHandlerInterceptor;
    /**
     * 注册拦截器
     * @param registry :拦截器的注册器
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(myHandlerInterceptor).addPathPatterns("/**").excludePathPatterns("/login");
    }
}
5.10.2 添加视图控制器
@Override
public void addViewControllers(ViewControllerRegistry registry) {
    registry.addViewController("/xx").setViewName("hello2.html");
}

5.11 集成DataSource

5.11.1 导入依赖
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.20</version>
</dependency>
<!-- mysql 数据库驱动. -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>1.1.1</version>
</dependency>
5.11.2 手动配置方式
jdbc:
    username: root
    password: 123456
    url: jdbc:mysql:///ssm
    driver-class-name: com.mysql.jdbc.Driver
@Bean
@ConfigurationProperties(prefix = "jdbc")
public DataSource dataSource(){
    DruidDataSource dataSource = new DruidDataSource();
    return dataSource ;
}
5.11.3 自动配置
spring:
  datasource:
    username: root
    password: 123456
    url: jdbc:mysql:///ssm
    driver-class-name: com.mysql.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource

5.12 集成MyBatis

5.12.1 导入依赖
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>1.1.1</version>
</dependency>
5.12.2 配置Mybatis
spring:
  datasource:
    username: root
    url: jdbc:mysql:///rpms
    password: 123456
    driver-class-name: com.mysql.jdbc.Driver

mybatis:
  mapper-locations: classpath:mapper/*Mapper.xml
5.12.3 配置Mapper接口扫描包
@SpringBootApplication
@MapperScan("cn.itsource.springboot.mapper")
@EnableTransactionManagement
public class SpringbootOkApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringbootOkApplication.class, args);
    }
}
springboot 断点上传、续传、秒传实现 群里面都是三言两语言的,也不完整,问题也说不清楚,也没有视频,教程之类的资料,不敢用,客户那边对这块还是有要求的。我们主要是做政府项目,客户也都是政府单位的,对用户体验要求比较高,要让他们感觉用的方便,对稳定性要求比较高,基本上一年365天都不希望你出问题,对安全性要求也比较高,涉密了,信创国产化,不能连外网的,都是内网。用的是HTML5也好,控件也罢,这些都无所谓。网上搜到的SpringBoot的代码不多,完整的不多,能用的也不多,基本上大部分的文章只是提供了少量的代码,讲一下思路,或者实现方案。 阅读详情

相关推荐

用Java实现对接豆包ai火山引擎详细版简单明了ai对话

第二部分代码实现。

m0_72637700的博客 8606

SpringBoot解析MyBatis预编译SQL

SpringBoot解析MyBatis预编译SQL

Meta39的博客 570

告别命令行恐惧!用TBtools的MCScanX插件,5分钟搞定拟南芥和水稻的基因组共线性分析

本文介绍如何利用TBtools的MCScanX插件快速完成拟南芥和水稻的基因组共线性分析,无需命令行操作,5分钟即可生成专业可视化结果。通过图形化界面简化传统MCScanX的复杂流程,特别适合非生物信息背景的研究者,显著提升基因组数据分析效率。

dianzhuique8587的博客 377

详解 Springboot 中使用 Aop

AOP (Aspect Oriented Programming),意为面向切面编程,可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。AOP的编程思想是把对类对象的横切问题点,从业务逻辑中分离出来,从而达到解耦的目的,增加代码的复用性,提高开发效率。...

KevinChen2019的博客 2544

Win10 + Linux 双系统删除(Linux)

删除Linux所使用的磁盘分区 进入此电脑->计算机->管理->磁盘管理

weixin_52247624的博客 943

【FPGA】安路FPGA下载器驱动安装教程

#来自学渣的问候 最近正在参加19年的FPGA创新设计大赛,然后我们选择了安路(全名:上海安路信息科技有限公司)的 FPGA 开发板。安路算是国产FPGA中还不错的一家,和紫光一样,除了自主生产的FPGA,也开始拥有了自己的编译环境。 好了。言归正传,写这篇博客的原因是,前几天在安装 安路 的编译环境和下载器驱动的时候,出了点问题,弄得心烦意乱。所以打算解决之后写篇博客,避开这个神奇的问题。 首先...

Ninquelote的博客 2万+

springboot源码编译

sprinboot源码编译

fuzekun的博客 3363

开源DIY龙门架:从零构建可编程运动控制平台

运动控制是自动化与机器人技术的核心基础,它通过精确指令驱动执行机构,实现物体的定位与轨迹规划。其原理通常涉及控制器、驱动器、电机与传动机构的协同工作,核心价值在于将数字指令转化为精准的物理运动,从而解放人力并提升作业一致性。在工业自动化、桌面制造(如3D打印、激光雕刻)及教育机器人等领域应用广泛。本文聚焦于一个具体的工程实践案例:使用**铝型材**、**3D打印**零件、Arduino控制器及步进电机,从机械结构设计、电路连接到代码编写,手把手教你打造一个模块化、可扩展的开源龙门架系统。该系统不仅成本可控,

weixin_33168937的博客 614

Spring多例模式 注解@Scope("prototype")和xml配置scope="prototype"

这里牵扯到单利模式的线程安全的设计。 我们知道sping ioc注入的bean;一般都是无状态的【dao,service等,这种不会牵涉到值或者状态改变的情况】,也就是在多线程下可以基本保证线程安全的;但是,有些情况下可能是有状态的;有状态的bean ,是要注意线程安全的;spring是有考虑到这方面的需求的;prototype 原型类型,应运而生; 1. 首先说下spring多例模式的两种配...

u010235716的博客 1万+

YOLO26改进策略【YOLO和Mamba】| 2024 VM-UNet,高效的特征提取模块VSS block 二次创新提高精度

VM-UNet模型设计的出发点是解决现有CNN-based和模型在医学图像分割中的局限性,利用(SSMs)的优势,提出一种更有效的医学图像分割模型。具体来说,CNN-based模型在捕捉长距离信息方面存在不足,而模型由于自注意力机制的二次复杂度导致计算负担较重。SSMs模型如Mamba不仅在建模长距离依赖方面表现出色,还具有线性计算复杂度,这为VM-UNet的设计提供了理论基础。

Limiiiing的博客 213

【nvidia-B200】实际生产报错NVRM: nvAssertFailedNoLog: Assertion failed: pIOVAS != NULL @ io_vaspace.c:601

升级 NVIDIA 驱动到 R545/R550 数据中心版本(解决 IOVA bug,这是性能差的根本原因);重启服务器(清理驱动残留资源,消除日志中的 NVRM 错误);验证 NVLink/PCIe 链路(确保 8 卡互联使用高速链路,而非单卡 PCIe 共享带宽)。完成这 3 步后,ncccl-test的all_reduce带宽应能提升至100GB/s 以上(取决于服务器的 NVLink/NVSwitch 配置),恢复正常性能。

jundao1997的专栏 647

SpringBoot 项目,自动编译,热部署,立刻看到效果

1:在pom.xml 中 配置&lt;dependency&gt; &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt; &lt;artifactId&gt;spring-boot-devtools&lt;/artifactId&gt; &lt;optional&gt;true&lt;/optional&gt; &a

王震1024的专栏 1万+

调节桌面图标大小的方法(编程)

如果你对其他操作系统或编程语言有类似的需求,可以根据具体的情况进行相应的调整和搜索相关的库和方法。在编程中,我们可以使用各种桌面应用程序来调节桌面图标的大小。库提供的函数,我们获取了桌面图标的窗口句柄,并使用Windows消息发送方式设置图标的大小。你可以根据自己的需求修改代码中的图标大小值,并在运行代码后观察桌面图标的变化。函数并传入所需的图标大小,这里设置为48x48像素。首先,我们需要使用Python的第三现的方法。首先,我们需要使用Python的第三方库。首先,我们需要使用实现的方法。

CyberFlare的博客 437

全网最强SpringBoot教程 | 万字长文爆肝SpringBoot

本文介绍了SpringBoot框架的基本概念和快速开发步骤。SpringBoot旨在简化Spring应用的初始搭建和开发流程,相比传统SpringMVC开发更加便捷。 主要内容包括: SpringBoot简介:对比传统Spring开发,展示其简化配置的优势 快速入门开发步骤: 通过Spring Initializr创建项目 选择所需技术依赖(如Spring Web) 开发Controller类 运行自动生成的Application主类 项目结构说明:自动生成的配置类和简化后的pom.xml文件 测试验证:使

qq_45832461的博客 3503

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

SpringBoot与MybatisPlus SpringBoot

仅为个人学习使用。

,,,,,,, 7319

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

SpringBoot——SpringBoot启动原理

本博文将介绍SpringBoot启动原理,帮助大家更好的理解相关springboot的原理。更好在面试中回答面试问题。

庄小焱 8720

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

SpringBoot 作业

基于SpringBoot的CRUD增删改查操作

2301_76731971的博客 567

SpringBoot6/springBoot集成Elasticsearch:打造高效搜索引擎应用

SpringBoot6/springBoot集成Elasticsearch项目是一个专为新手和开发者设计的实用Demo,它展示了如何在SpringBoot应用中快速集成Elasticsearch搜索引擎,实现高效的数据检索功能。通过这个项目,你可以轻松掌握SpringBoot与Elasticsearch的整合技巧,为你的应用添加强大的搜索能力。 ## 🚀 为什么选择Elasticsearch?

gitblog_00549的博客 852

SpringBoot6/springBoot集成WebSocket:实时通讯应用开发教程

SpringBoot6/springBoot是一个包含丰富SpringBoot知识点的Demo项目,每个子项目都聚焦于一个特定技能点,非常适合新手学习和开发者复习。本文将详细介绍如何在该项目中集成WebSocket,搭建实时通讯应用,让你快速掌握这一实用技术。 ## 什么是WebSocket?为什么选择它? WebSocket是一种在单个TCP连接上进行全双工通信的协议,能让客户端和服务器之间

gitblog_00711的博客 835

如何快速上手SpringBoot6/springBoot:新手必备的环境搭建与第一个Demo教程

SpringBoot6/springBoot是一个包含丰富SpringBoot系列Demo代码的项目,每个子项目都对应SpringBoot的一个知识点或技能点,且都有相应的博客介绍,代码开箱即用,非常适合新手学习或老司机复习。通过本教程,你将快速掌握SpringBoot6/springBoot的环境搭建方法,并成功运行第一个Demo,开启你的SpringBoot学习之旅。 ## 📋 环境准备:

gitblog_01094的博客 515

SpringBoot - Jackson详解

JSON 是目前主流的前后端数据传输方式。在 Spring Boot 项目中,只要添加了 WEB依赖(spring-boot-starter-web),就可以很方便地实现 JSON 转换。WEB 依赖默认加入了 jackson-databind 作为 JSON 处理器,我们不需要要添加额外的 JSON 处理器就可以返回一段 JSON。

记录并分享 947

SpringBoot整合Sentinel【详解】

springboot整合sentinel【详解】

qq_27480007的博客 1514

springboot整合mybatis(一)入门

mybatis

xiatianit的博客 3026

【springboot整合mybatis】分页

pageHelper 分页

xiatianit的博客 489

SpringBoot实战之路

1、为什么用到SpringBoot? 传统项目:整合SSH或者SSM,考虑配置文件,jar包冲突等问题 打包方式:打war包放到Tomcat webapp目录下进行执行 2、什么是SpringBoot? 快速开发框架,快速整合第三方常用框架。(Maven依赖关系,Maven继承方式实现) 完全采用注解化简化xml配置。内嵌Http服务器(Tomcat、Jetty)最终以java应用程序执...

秋实先生的博客 369

[ SpringBoot ]

Spring虽然有很多优点, 但是Spring框架的1. 配置麻烦,而且很多都是模版化的配置(固定的)2. 需要添加很多依赖, 例如web层依赖jackson组件,需要我们自己添加, 版本也可能不匹配基于以上两点,spring官方推出了SpringBoot .

yang20060116的博客 844
上一篇: Redis-Cluster&ElasticSearch
下一篇: SpringCloud
虞铭轩、
博客等级 码龄7年 3粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值