微服务带来的新问题:
自动化
可观测性:日志(ELK)、跟踪(Skywalking)、指标(Prometheus)
分布式问题:分布式事务、数据关联、幂等性
SOA与微服务:
SOA:整合不同异构系统,ESB 统一解决;基于配置
微服务:拆分系统,分而治之;约定大于配置
DDD:
DDD:指定微服务划分,方法论,熟悉业务再建模;统一语言(业务、技术),化繁为简
Selection 是一个强大的表达式语言功能,它让你通过从一个源集合的条目中进行选择,将其转化为另一个集合。
选择使用的语法是 .?[selectionExpression]
。它对集合进行过滤,并返回一个新的集合,其中包含原始元素的一个子集。
List<Inventor> list = (List<Inventor>) parser.parseExpression("members.?[nationality == 'Serbian']")
.getValue(societyContext);
安全导航操作符:
通常情况下,当你有一个对象的引用时,你可能需要在访问该对象的方法或属性之前验证它是否为空。为了避免这种情况,安全导航操作符返回null,而不是抛出一个异常。
ExpressionParser parser = new SpelExpressionParser();
EvaluationContext context = SimpleEvaluationContext.forReadOnlyDataBinding().build();
Inventor tesla = new Inventor("Nikola Tesla", "Serbian");
tesla.setPlaceOfBirth(new PlaceOfBirth("Smiljan"));
String city = parser.parseExpression("placeOfBirth?.city").getValue(context, tesla, String.class);
System.out.println(city); // Smiljan
tesla.setPlaceOfBirth(null);
city = parser.parseExpression("placeOfBirth?.city").getValue(context, tesla, String.class);
System.out.println(city); // null - does not throw NullPointerException!!!
埃尔维斯(Elvis)运算符:
String displayName = (name != null ? name : "Unknown");
// 埃尔维斯(Elvis)运算符
String name = parser.parseExpression("name?:'Unknown'").getValue(new Inventor(), String.class);
做新产品在功能方面应该有这样的三条原则:
1、完成客户业务场景的最小闭环(这里需要借鉴市场上的已有产品)
2、拥有自己的特色功能,形成差异化优势(最好能够与公司既有优势能力相关,而非单薄的功能)
3、逐渐形成上文说的“产品的灵魂”。只有想清楚我们的产品能提供怎样的独特价值、如何创新地帮客户解决问题,并且能长期坚持、取舍有度,产品才有灵魂。
概念:
技术实力 = 解决问题的能力。
技术要能解决具体问题才有价值。
问题复杂度决定技术实力的高度。
硬实力:
点:技术点,JDBC
线:技术线,一个业务功能的处理过程(相关技术点)
面:技术面,Java技术(多线程、JVM调优等)
体:技术体系,架构设计(编程语言、数据库、网络)
软实力:
发现问题能力(根本问题)
技术创新(造新轮子)
CommandLineRunner:用于实现项目启动之前,预加载数据。
详情:https://blog.csdn.net/ruben95001/article/details/78340700
#SpringBoot