首页 文章 精选 留言 我的

精选列表

搜索[项目自动化构建工具],共10000篇文章
优秀的个人博客,低调大师

阿里巴巴举办首届产业数据库研发论坛:链结产学研 构建创新生态圈

10月12日-14日,一年一度的中国数据库学术会议(NDBC 2018)如期在大连举行。NDBC是由中国计算机学会(CCF)主办、数据库专业委员会承办的中国数据库领域最高学术会议。在这场代表了国内数据库最强实力的学术盛宴上,阿里巴巴集结了强大的参会阵容,由阿里巴巴集团副总裁、达摩院科学家、数据库与存储技术负责人李飞飞博士(花名:飞刀)亲自带队。此外,达摩院数据库与存储实验室还联合CCF数据库专业委员会,举办了首届产业数据库研发论坛,力邀知名企业技术负责人及学界专家,共同探讨国内数据库的产学研生态,为数据库的长期发展作出原创性贡献。 依托NDBC平台,产业数据库研发论坛是一次学术界和工业界的双向数据库技术沙龙,皆在拉近数据库学术研究和新兴互联网业务需求之间的距离,以实际场景与数据库顶级学者交流,寻求系统层级的前沿技术突破,搭建企业与高

优秀的个人博客,低调大师

第5章—构建Spring Web应用程序—关于spring中的validate注解后台校验的解析

关于spring中的validate注解后台校验的解析 在后台开发过程中,对参数的校验成为开发环境不可缺少的一个环节。比如参数不能为null,email那么必须符合email的格式,如果手动进行if判断或者写正则表达式判断无意开发效率太慢,在时间、成本、质量的博弈中必然会落后。所以把校验层抽象出来是必然的结果,下面说下几种解决方案。 1.简单的校验Demo 依赖: <dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> <version>1.1.0.Final</version> </dependency> Student: import javax.validation.constraints.*; import java.math.BigDecimal; import java.util.Date; public class Student { @NotNull(message = "名字不能为空") private String name; @Size(min = 6, max = 30, message = "地址应该在6-30字符之间") private String address; @DecimalMax(value = "100.00", message = "体重有些超标哦") @DecimalMin(value = "60.00", message = "多吃点饭吧") private BigDecimal weight; private String friendName; @AssertTrue private Boolean isHaveFriend() { return friendName != null ? true : false; } @Future(message = "生日必须在当前实践之前") private Date birthday; @Pattern(regexp = "^(.+)@(.+)$", message = "邮箱的格式不合法") private String email; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public BigDecimal getWeight() { return weight; } public void setWeight(BigDecimal weight) { this.weight = weight; } public String getFriendName() { return friendName; } public void setFriendName(String friendName) { this.friendName = friendName; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } } DemoTest: import javax.validation.*; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Set; public class DemoTest { public static void main(String[] args) { Student xiaoming = getBean(); List<String> validate = validate(xiaoming); validate.forEach(row -> { System.out.println(row.toString()); }); } private static Student getBean() { Student bean = new Student(); bean.setName(null); bean.setAddress("北京"); bean.setBirthday(new Date()); bean.setFriendName(null); bean.setWeight(new BigDecimal(30)); bean.setEmail("xiaogangfan163.com"); return bean; } private static ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); public static <T> List<String> validate(T t) { Validator validator = factory.getValidator(); Set<ConstraintViolation<T>> constraintViolations = validator.validate(t); List<String> messageList = new ArrayList<>(); for (ConstraintViolation<T> constraintViolation : constraintViolations) { messageList.add(constraintViolation.getMessage()); } return messageList; } } 2.SpringMVC中的应用: 实体类的注解还是和Student类一样,只是controller接值的时候需要做点改动如下: // 使用@Valid 表明获取到的数据模型需要验证,传入的Errors对象就是验证出错之后的数据对象,包括校验错误的个数,具体的信息等 @RequestMapping(value="/register", method=RequestMethod.POST) public String registerForm( @Valid @ModelAttribute Student stu, Errors error){ logger.info("注册新用户"); if ( error.hasErrors()) { logger.error("出错啦"); } stuList.add(stu); logger.info("注册的用户信息:/n" + stu); return "login"; }

优秀的个人博客,低调大师

实战案例:构建docker容器集群 (解决方案一:使用自定义网桥连接跨主机容器)

一、实验环境 虚拟机a两块网卡 eth0 eth1 (IP地址static或者dhcp) 虚拟机b两块网卡 eth0 eth1 (IP地址static或者dhcp) 二、在两台虚拟机上配置网桥 虚拟机a操作: apt-get install bridge-utils vim /etc/network/interfaces auto eth0 iface eth0 inet dhcp auto eth1 iface eth1 inet dhcp auto br0 iface br0 inet static address 192.168.200.4 network 192.168.200.0 netmask 255.255.255.0 broadcast 192.168.200.255 gateway 192.168.200.1 dns-nameservers 192.168.89.2 bridge_ports eth0 bridge_stp off bridge_fd 0 bridge_maxwait 0 bridge_maxage 12 虚拟机b操作: apt-get install bridge-utils vim /etc/network/interfaces auto eth0 iface eth0 inet dhcp auto eth1 iface eth1 inet dhcp auto br0 iface br0 inet static address 192.168.200.3 network 192.168.200.0 netmask 255.255.255.0 broadcast 192.168.200.255 gateway 192.168.200.1 dns-nameservers 192.168.89.2 bridge_ports eth0 bridge_stp off bridge_fd 0 bridge_maxwait 0 bridge_maxage 12 配置好后重启即可!!! 三、验证网桥(ping一下) root@docker-test:~# ping 192.168.200.3 PING 192.168.200.3 (192.168.200.3) 56(84) bytes of data. 64 bytes from 192.168.200.3: icmp_seq=1 ttl=64 time=0.714 ms 64 bytes from 192.168.200.3: icmp_seq=2 ttl=64 time=0.549 ms root@docker-test:~# ping 192.168.200.4 PING 192.168.200.4 (192.168.200.4) 56(84) bytes of data. 64 bytes from 192.168.200.4: icmp_seq=1 ttl=64 time=0.036 ms 64 bytes from 192.168.200.4: icmp_seq=2 ttl=64 time=0.078 ms 虚拟机a验证 root@docker-test:~# brctl show bridge name bridge id STP enabled interfaces br0 8000.000c29f87a89 no eth0 #网桥br0连接到物理网卡eth0 docker0 8000.56847afe9799 no 虚拟机b验证: bridge name bridge id STP enabled interfaces br0 8000.000c298c2483 no eth0 #网桥br0连接到物理网卡eth0 docker0 8000.56847afe9799 no 四、开始修改docker相关配置文件(将容器绑定到指定的网桥上) 虚拟机a操作: vim /etc/default/docker 在最后一行添加 DOCKER_OPTS="-b=br0" 虚拟机b操作: vim /etc/default/docker 在最后一行添加 DOCKER_OPTS="-b=br0" 修改完之后,重启docker服务 service docker restart 五、创建容器 虚拟机1操作: docker run -dti -p 5000:5000 --name web1 training/webapp python app.py #创建并在后台运行容器 root@docker-test:~# docker ps -a 查看网卡 ifconfig命令, 发现多了一块刚才创建的容器的虚拟网卡:vethbe760cd root@docker-test:~# brctl show bridge name bridge id STP enabled interfaces br0 8000.000c29f87a89 no eth0 vethbe760cd 进入容器: docker exec -ti web1 /bin/bash 进入容器后,ping物理网络,是否可以连通 虚拟机2操作: docker run -dti -p 5000:5000 --name web2 training/webapp python app.py #创建并在后台运行容器 root@docker2:~# docker ps -a 查看网卡 ifconfig命令, 发现多了一块刚才创建的容器的虚拟网卡:veth09f70b6 root@docker2:~# brctl show bridge name bridge id STP enabled interfaces br0 8000.000c298c2483 no eth0 veth09f70b6 进入容器: docker exec -ti web1 /bin/bash 进入容器后,ping物理网络,是否可以连通 注意:这样的实现方式,主要问题是需要知道容器所在物理主机(或者虚拟机)的IP地址 那么,如果用Ambassador容器机制,可以让互联的容器无需知道所在物理主机的IP地址即可互联 本文转自 TtrToby 51CTO博客,原文链接:http://blog.51cto.com/freshair/1958355

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册