大师网-带你快速走向大师之路 解决你在学习过程中的疑惑,带你快速进入大师之门。节省时间,提升效率

spring-boot-starter-grpc 实现原理

// 指定包名 option java_package = "com.anoyi.rpc"; // 指定类名 option java_outer_classname = "GrpcService"; // 定义通用的 Grpc 服务 service CommonService { // 处理请求 rpc handle ( Request ) returns ( Response ) {} } // 定义通用的 Grpc 请求体 message Request { bytes request = 1; } // 定义通用的 Grpc 响应体 message Response { bytes reponse = 1;

003SpringBoot之@ConfigurationProperties与@Value的区别

} 输出年龄:44 六、JSR303数据校验 1、@ConfigurationProperties 配置: person: lastName: 张三 age: 25 isBoss: false birth: 2017/12/12 maps: {key1: value1,key2: value2} lists: - 雷军 - 乔布斯 - 马云 dog: name: milly age: 2 JavaBean: @ConfigurationProperties(prefix = "person") @Component @Validated public class Person { @Email private String lastName; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [person.lastName,lastName];

004SpringBoot之@PropertySource与@ImportResource的区别

private boolean isBoss; private List lists; @Test public void testHelloService() { boolean helloService = ioc.containsBean("helloService"); System.out.println(helloService); } } 2.4、测试结果 false 2.5、修改运行类 @SpringBootApplication @ImportResource(locations = {"classpath:beans.xml"}) public class Springboot02ConfigApplication { public static void main(String[] args) { SpringApplication.run(Springboot02ConfigApplication.class, args);

Spring Boot 配置随机数技巧

} public void setRange(int range) { this.range = range; } } 输出如下: secret=83a5c3402ef936a37842dc6de3d1af0f intNumber=1816149855 lessTen=1 range=37625 longNumber=8449008776720010146 uuid=e5bc2091-1599-45b1-abd7-e3721ac77e6b 具体的生成细节可以参考Spring Boot的配置类: org.springframework.boot.context.config.RandomValuePropertySource 来看下它的源码,实现其实很简单。 public RandomValuePropertySource(String name) { super(name, new Random());nextInt();

RestTemplate或者AsyncRestTemplate设置编码

RestTemplate或者AsyncRestTemplate设置编码 环境: jdk: 8 spring-boot: 2.x 一、问题描述 在spring-boot 项目中使用RestTemplate和AsyncRestTemplate,RestTemplate发送请求时不会出现乱码,但是AsyncRestTemplate会出现乱码情况 二、问题分析 首先想到是加请求头 application/json;iterator(); } 注意 :增加解析器后,最好在 post、put、delete 请求增加contentType 头信息,类似如下 HttpHeaders headers = new HttpHeaders();

Spring boot 2.0 之优雅停机

,注册一个JVM关闭的钩子,这个钩子可以在以下几种场景被调用: 程序正常退出 使用System.exit() 终端使用Ctrl+C触发的中断 系统关闭 使用Kill pid命令干掉进程 测试shutdownHook的功能,代码示例: public class TestMain { private ShutdownHook shutdownHook; } @Override public void onApplicationEvent(ContextClosedEvent contextClosedEvent) { this.connector.pause();interrupt();shutdown(); Undertow undertow = (Undertow) field.get(webServer);

spring boot 源码解析-SpringApplication初始化

spring boot 源码解析-SpringApplication初始化 前 我们成个spring boot 项时,会带个启动类. 解析 先调了org.springframework.boot.SpringApplication#run(Object, String... args) { return run(new Object[] { source }, args); } 接着调如下代码: public static ConfigurableApplicationContext run(Object[] sources, String[] args) { return new SpringApplication(sources).run(args); } 可以发现 先初始化了SpringApplication,然后调其实例法:run.

spring整合activemq

//7.发送消息 TextMessage QMessage = new ActiveMQTextMessage(); jmsTemplate.send(destination,new MessageCreator() { @Override public Message createMessage(Session session) throws JMSException { return session.createTextMessage("生意来了,张三购买商品"); } } } 发布订阅模式 发布者 @Test public void testSpringActiveMqTopicProducter() { ApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext("classpath:applicationContext-activemq.xml");

Java 设计模式(11) —— 组合模式

} } 2.定义统一的子类菜单对象 /** * 组合模式,子菜单对象,继承超类组合对象 */ public class MenuItem extends MenuComponent { private String name, description; public SubMenu() { menuItems = new ArrayList (); } } public Iterator getIterator() { return new ComposeIterator(new DinerIterator()); } @Override public boolean hasNext() { if (position numberOfItems) { return true; CakeHouseMenu mCakeHouseMenu = new CakeHouseMenu(); DinerMenu mDinerMenu = new DinerMenu();

Spring Bean注册解析(二)

} // 以id属性的值作为当前bean的默认名称,如果没有id属性,那么将name属性的第一个值作为当前bean的名称 String beanName = id; // 解析并且封装property子标签到BeanDefinition中 parsePropertyElements(ele, bd); // 如果有value属性值,则对value属性值进行处理 } else if (hasValueAttribute) { // 将value属性值封装到TypedStringValue对象中 TypedStringValue valueHolder = new TypedStringValue(ele.getAttribute(VALUE_ATTRIBUTE));

用IDEA搭建springboot+thymleaf+mybatis(附分页方法)

用IDEA搭建springboot+thymleaf+mybatis(附分页方法) 参考thymleaf官方网址: https://www.thymeleaf.org/ 现在主流的微服务springboot配合H5开发效率极快。也符合现在前后端分离的开发方式。 thymleaf作为页面模板框架,可以更好的处理Controller和html的关系。 具体搭建过程请详见我的博客:https://blog.csdn.net/HaleyLiu123/article/details/80318496?

java代理demo

java代理demo 需求:使用AOP方式打印日志 用户service层,接口与实现类 public interface IUserService { void addUser(String name); System.out.println("我是日志:添加了"+name); } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { //执行额外的逻辑 System.out.println("我是日志,前置处理"); } } cglib代理类 public class CglibProxy implements MethodInterceptor{ private Enhancer enhancer = new Enhancer();

Spring 事务应用误区总结:那些导致事务不回滚的坑

} "199999933333"长度超过11位,会触发数据库异常,正常情况下会引起事务的回滚。 下面我们可以通过一个集成测试来验证一下该事务有没有生效。 @RunWith(SpringRunner.class) @SpringBootTest(classes = YmcfApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) @EnableAutoConfiguration public class UserServiceImplTest { @Autowired private UserService userService; User user2 = new User(11L, "100000000000", "哼哼哼");

基于Spring Boot的登录demo

@RestController public class LoginController { @RequestMapping("/") public ModelAndView index() { return new ModelAndView("index"); } } } 项目打包运行 使用maven进行打包。 mvn install Spring Boot里面嵌入了Tomcat,直接运行 java -jar xxx.jar p6 浏览器输入: http://localhost:8080 账号:qinya 密码:tianle 参考来源 Spring Boot基础教程 基于Bootstrap的简洁登录界面设计效果 Building an Application with Spring Boot

Java 设计模式(10) —— 迭代器模式

public MenuItem(String name,String description,boolean vegetable,float price) { this.name=name; public CakeHouseMenu() { menuItems = new ArrayList (); addItem("Stawberry Cake","fresh stawberry",true,3.29f); private MenuItem[] dineritems; } 2.中西餐厅分别实现迭代方法 /** * 自定义迭代器对象,西餐厅实现迭代方法 */ class CakeHouseIterator implements Iterator { private int position = 0; @Override public boolean hasNext() { if (position numberOfItems) { return true;

Spring Security 架构与源码分析以及基于Spring Security实现前后端分离项

Spring Security 架构与源码分析以及基于Spring Security实现前后端分离项 Spring Security 架构与源码分析 Spring Security 主要实现了Authentication(认证,解决who are you? 看具体的实现,retrieveUser,直接调用userDetailsService获取用户: protected final UserDetails retrieveUser(String username, UsernamePasswordAuthenticationToken authentication) throws AuthenticationException { UserDetails loadedUser;passwordEncoder(passwordEncoder());

Spring Boot 单元测试详解+实战教程

username={username}",ActResult.class,multiValueMap); multiValueMap.add("files",resource); } 文件下载测试 @Test public void download() throws Exception { HttpHeaders headers = new HttpHeaders(); headers.set("token","javastack"); HttpEntity formEntity = new HttpEntity(headers);class,urlVariables); } } 推荐:Spring Boot Cloud 最强技术教程 扫描关注我们的微信公众号,干货每天更新。 image

IDEA破解至2099年

IDEA破解至2099年 1.官网下载IDEA 2.两种方法破解 2.1 注册码:http://idea.lanyus.com/ 2.2 下载jar包,放在idea安装目录bin下, 2.1 修改上图中两个文件,添加如下,jar包路径改成自己的 -javaagent:D:\IntelliJ IDEA 2018.1.4\bin\JetbrainsCrack-2.8-release-enc.jar 2.3 启动idea 选择actvie code ThisCrackLicenseId-{ "licenseId":"ThisCrackLicenseId", "licenseeName":"用户名开心就好", "assigneeName":"", "assigneeEmail":"一个邮箱.