首页 文章 精选 留言 我的

精选列表

搜索[整合],共10003篇文章
优秀的个人博客,低调大师

SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作

前言 什么是 MyBatis? MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。 参考资料:https://mybatis.org/mybatis-3/zh Jar包说明 本次采用mybatis-spring-boot-starter_v2.1.1版本,对应的MyBatis版本为3.5.3。并且...

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

Spring Boot 整合 elk

一、elk 简介 Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。 Logstash是一个完全开源的工具,他可以对你的日志进行收集、过滤,并将其存储供以后使用(如,搜索)。 Kibana 也是一个开源和免费的工具,它Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志。 二、elk的安装 我们采用的 docker 镜像安装。 #下载镜像 docker pull sebp/elk #启动镜像 , 指定es的内存 docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -p 5601:5601 -p 5044:5044 -p 9200:9200 -p 9300:9300 -it --name elk 2fbf0a30426d 需要修改 logstash 配置,新建命令窗口,进行下面的docker命令 #通过exec命令进入容器 docker exec -it elk /bin/bash 进入容器后,修改 /etc/logstash/conf.d/02-beats-input.conf input { tcp { port => 5044 codec => json_lines } } output{ elasticsearch { hosts => ["localhost:9200"] } } 保存后,我们使用 control + P + Q 退出容器。然后重启容器,让我们的配置生效。 docker restart elk 我们访问http://127.0.0.1:5601 三、创建工程 创建工程springboot-elk ,并使用logback 记录日志。 1. pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.gf</groupId> <artifactId>springboot-elk</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>springboot-elk</name> <description>Demo project for Spring Boot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.1.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!-- logback --> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> </dependency> <dependency> <groupId>net.logstash.logback</groupId> <artifactId>logstash-logback-encoder</artifactId> <version>5.2</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <fork>true</fork> </configuration> </plugin> </plugins> </build> </project> 2. 启动类 @RestController @SpringBootApplication public class SpringbootElkApplication { private final static Logger logger = LoggerFactory.getLogger( SpringbootElkApplication.class ); public static void main(String[] args) { SpringApplication.run(SpringbootElkApplication.class, args); } @GetMapping("/{name}") public String hi(@PathVariable(value = "name") String name) { logger.info( "name = {}" , name ); return "hi , " + name; } } 3. logback-spring.xml <?xml version="1.0" encoding="UTF-8"?> <!--该日志将日志级别不同的log信息保存到不同的文件中 --> <configuration> <include resource="org/springframework/boot/logging/logback/defaults.xml" /> <springProperty scope="context" name="springAppName" source="spring.application.name" /> <!-- 日志在工程中的输出位置 --> <property name="LOG_FILE" value="${BUILD_FOLDER:-build}/${springAppName}" /> <!-- 控制台的日志输出样式 --> <property name="CONSOLE_LOG_PATTERN" value="%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}" /> <!-- 控制台输出 --> <appender name="console" class="ch.qos.logback.core.ConsoleAppender"> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>INFO</level> </filter> <!-- 日志输出编码 --> <encoder> <pattern>${CONSOLE_LOG_PATTERN}</pattern> <charset>utf8</charset> </encoder> </appender> <!-- 为logstash输出的JSON格式的Appender --> <appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender"> <destination>127.0.0.1:5044</destination> <!-- 日志输出编码 --> <encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder"> <providers> <timestamp> <timeZone>UTC</timeZone> </timestamp> <pattern> <pattern> { "severity": "%level", "service": "${springAppName:-}", "trace": "%X{X-B3-TraceId:-}", "span": "%X{X-B3-SpanId:-}", "exportable": "%X{X-Span-Export:-}", "pid": "${PID:-}", "thread": "%thread", "class": "%logger{40}", "rest": "%message" } </pattern> </pattern> </providers> </encoder> </appender> <!-- 日志输出级别 --> <root level="INFO"> <appender-ref ref="console" /> <appender-ref ref="logstash" /> </root> </configuration> 启动工程,日志会存入elasticsearch中,通过Kibana 的web界面,配置后,我们就可看到,下面我简单的修改下配置。 三、配置 pattern 配置 pattern 输入*,匹配所有数据。 选择时间@timestamp,这样数据展示会以时间排序 好了 ,点击discover,就可以看到我们springboot-elk项目的日志信息了。 源码下载: https://github.com/gf-huanchupk/SpringBootLearning

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

Spark整合Mongodb[转]

环境准备 mongodb下载 解压安装 启动mongodb服务 $MONGODB_HOME/bin/mongod--fork--dbpath=/root/data/mongodb/--logpath=/root/data/log/mongodb/mongodb.log pom依赖 org.mongodb.spark mongo-spark-connector_2.11 ${spark.version} 实例代码 objectConnAppTest{ defmain(args:Array[String]):Unit={ valspark=SparkSession.builder() .master("local[2]") .appName("ConnAppTest") .config("spark.mongodb.input.uri","mongodb://192.168.31.136/testDB.testCollection")//指定mongodb输入 .config("spark.mongodb.output.uri","mongodb://192.168.31.136/testDB.testCollection")//指定mongodb输出 .getOrCreate() //生成测试数据 valdocuments=spark.sparkContext.parallelize((1to10).map(i=>Document.parse(s"{test:$i}"))) //存储数据到mongodb MongoSpark.save(documents) //加载数据 valrdd=MongoSpark.load(spark) //打印输出 rdd.show } } 原文链接:http://blog.csdn.net/soul_code/article/details/78523140

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

spring boot整合shiro

一、需要的依赖包 <!--shiro的版本--> <properties> <org.apache.shiro.version>1.3.2</org.apache.shiro.version> </properties> <!--shiro--> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-core</artifactId> <version>${org.apache.shiro.version}</version> /dependency> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-web</artifactId> <version>${org.apache.shiro.version}</version> </dependency> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring</artifactId> <version>${org.apache.shiro.version}</version> </dependency> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-ehcache</artifactId> <version>${org.apache.shiro.version}</version> </dependency> 二、添加ehcache <?xmlversion="1.0"encoding="UTF-8"?> <!DOCTYPExml> <ehcacheupdateCheck="false"name="shiroCache"> <!--http://ehcache.org/ehcache.xml--> <defaultCache maxElementsInMemory="10000" eternal="false" timeToIdleSeconds="120" timeToLiveSeconds="120" overflowToDisk="false" diskPersistent="false" diskExpiryThreadIntervalSeconds="120" /> <!--登录记录缓存锁定10分钟--> <cachename="passwordRetryCache" maxEntriesLocalHeap="2000" eternal="false" timeToIdleSeconds="600" timeToLiveSeconds="1800" overflowToDisk="false" statistics="true"> </cache> <cachename="authorizationCache" maxEntriesLocalHeap="2000" eternal="false" timeToIdleSeconds="3600" timeToLiveSeconds="0" overflowToDisk="false" statistics="true"> </cache> <cachename="authenticationCache" maxEntriesLocalHeap="2000" eternal="false" timeToIdleSeconds="3600" timeToLiveSeconds="0" overflowToDisk="false" statistics="true"> </cache> <cachename="shiro-activeSessionCache" maxEntriesLocalHeap="2000" eternal="false" timeToIdleSeconds="3600" timeToLiveSeconds="0" overflowToDisk="false" statistics="true"> </cache> </ehcache> 三、创建一个realm publicclassShiroRealmextendsAuthorizingRealm{ @Autowired privateUserBizbiz; @Override protectedAuthorizationInfodoGetAuthorizationInfo(PrincipalCollectionprincipals){ //获取用户权限 SimpleAuthorizationInfoauthorizationInfo=newSimpleAuthorizationInfo(); authorizationInfo.setRoles(角色集合); authorizationInfo.setStringPermissions(权限集合); returnauthorizationInfo; } @Override protectedAuthenticationInfodoGetAuthenticationInfo(AuthenticationTokentoken)throwsAuthenticationException{ returnnewSimpleAuthenticationInfo(获取到的用户账号, 获取到的用户密码,ByteSource.Util.bytes(user.getUserNo()+Constants.token.salt),getName()); } } 四、添加验证器 publicclassPlatFormCredentialsMatcherextendsHashedCredentialsMatcher{ @Autowired privateUserServiceservice; @Autowired privateEhCacheManagershiroEhcacheManager; @Override publicbooleandoCredentialsMatch(AuthenticationTokentoken,AuthenticationInfoinfo){ Cache<String,AtomicInteger>passwordRetryCache=shiroEhcacheManager.getCache("passwordRetryCache"); Stringuserno=(String)token.getPrincipal(); //retrycount+1 AtomicIntegerretryCount=passwordRetryCache.get(userno); if(retryCount==null){ retryCount=newAtomicInteger(0); passwordRetryCache.put(userno,retryCount); } if(retryCount.incrementAndGet()>5){ //ifretrycount>5throw thrownewExcessiveAttemptsException(); } booleanmatches=super.doCredentialsMatch(token,info); if(matches){ //clearretrycount passwordRetryCache.remove(userno); Result<User>userResult=service.findByUserNo(userno); //根据登录名查询用户 Subjectsubject=SecurityUtils.getSubject(); Sessionsession=subject.getSession(); session.setAttribute("user",userResult.getResultData()); } returnmatches; } } 五、添加shiro配置 @Configuration publicclassShiroConfiguration{ privatestaticMap<String,String>filterChainDefinitionMap=newLinkedHashMap<String,String>(); @Bean(name="ShiroRealm") publicShiroRealmgetShiroRealm(@Qualifier("credentialsMatcher")CredentialsMatchermatcher){ ShiroRealmshiroRealm=newShiroRealm(); shiroRealm.setCredentialsMatcher(matcher); returnshiroRealm; } @Bean(name="shiroEhcacheManager") publicEhCacheManagergetEhCacheManager(){ EhCacheManagerem=newEhCacheManager(); em.setCacheManagerConfigFile("classpath:ehcache/ehcache-shiro.xml"); returnem; } @Bean(name="credentialsMatcher") publicPlatFormCredentialsMatchergetCredentialsMatcher(){ PlatFormCredentialsMatcherplatFormCredentialsMatcher=newPlatFormCredentialsMatcher(); platFormCredentialsMatcher.setHashAlgorithmName("MD5"); platFormCredentialsMatcher.setHashIterations(2); platFormCredentialsMatcher.setStoredCredentialsHexEncoded(true); returnplatFormCredentialsMatcher; } @Bean(name="lifecycleBeanPostProcessor") publicLifecycleBeanPostProcessorgetLifecycleBeanPostProcessor(){ returnnewLifecycleBeanPostProcessor(); } @Bean publicDefaultAdvisorAutoProxyCreatorgetDefaultAdvisorAutoProxyCreator(){ DefaultAdvisorAutoProxyCreatordaap=newDefaultAdvisorAutoProxyCreator(); daap.setProxyTargetClass(true); returndaap; } @Bean(name="securityManager") publicDefaultWebSecurityManagergetDefaultWebSecurityManager(@Qualifier("ShiroRealm")ShiroRealmshiroRealm){ DefaultWebSecurityManagerdwsm=newDefaultWebSecurityManager(); dwsm.setRealm(shiroRealm); dwsm.setCacheManager(getEhCacheManager()); returndwsm; } @Bean publicAuthorizationAttributeSourceAdvisorgetAuthorizationAttributeSourceAdvisor(@Qualifier("securityManager")DefaultWebSecurityManagerdwsm){ AuthorizationAttributeSourceAdvisoraasa=newAuthorizationAttributeSourceAdvisor(); aasa.setSecurityManager(dwsm); returnnewAuthorizationAttributeSourceAdvisor(); } @Bean(name="shiroFilter") publicShiroFilterFactoryBeangetShiroFilterFactoryBean(@Qualifier("securityManager")DefaultWebSecurityManagerdwsm){ ShiroFilterFactoryBeanshiroFilterFactoryBean=newShiroFilterFactoryBean(); shiroFilterFactoryBean .setSecurityManager(dwsm); shiroFilterFactoryBean.setLoginUrl("/login"); shiroFilterFactoryBean.setSuccessUrl("/admin/index"); shiroFilterFactoryBean.setUnauthorizedUrl("/login"); filterChainDefinitionMap.put("/login","authc"); filterChainDefinitionMap.put("/BJUI/**","anon"); filterChainDefinitionMap.put("/platform/**","anon"); filterChainDefinitionMap.put("/admin/course/category/list","perms[user:view]"); filterChainDefinitionMap.put("/admin/course/category/edit","perms[user:update]"); filterChainDefinitionMap.put("/admin/course/category/update","perms[user:update]"); filterChainDefinitionMap.put("/admin/course/category/add","perms[user:add]"); filterChainDefinitionMap.put("/admin/**","anon"); shiroFilterFactoryBean .setFilterChainDefinitionMap(filterChainDefinitionMap); returnshiroFilterFactoryBean; } /** *FilterRegistrationBean *@return */ @Bean publicFilterRegistrationBeanfilterRegistrationBean(){ FilterRegistrationBeanfilterRegistration=newFilterRegistrationBean(); filterRegistration.setFilter(newDelegatingFilterProxy("shiroFilter")); filterRegistration.setEnabled(true); filterRegistration.addUrlPatterns("/*"); filterRegistration.setDispatcherTypes(DispatcherType.REQUEST); returnfilterRegistration; } }

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

Hive和HBase整合

Hive和Hbase有各自不同的特征:hive是高延迟、结构化和面向分析的,hbase是低延迟、非结构化和面向编程的。Hive数据仓库在hadoop上是高延迟的。Hive集成Hbase就是为了使用hbase的一些特性。 Hive继承HBase可以有效利用HBase数据库的存储特性,如行更新和列索引等。在集成的过程中注意维持HBase jar包的一致性。Hive集成HBase需要在Hive表和HBase表之间建立映射关系,也就是Hive表的列和列类型与HBase表的列族及列限定词建立关联。每一个在Hive表中的域都存在与HBase中,而在Hive表中不需要包含所有HBase中的列。HBase中的rowkey对应到Hive中为选择一个域使用 :key 来对应,列族(cf:)映射到Hive中的其他所有域,列为(cf:cq)。 下面来简单实战下: 创建HBase表 create'user1',{NAME=>'info',VERSIONS=>1} 向user表中插入一些数据 put'user1','1','info:name','zhangsan' put'user1','1','info:age','25' put'user1','2','info:name','lisi' put'user1','2','info:age','22' put'user1','3','info:name','wangswu' put'user1','3','info:age','21' 使用scan命令来查看下user表中的数据 scan'user'; 结果如下 ROW COLUMN+CELL 1 column=info:age, timestamp=1476773051604, value=25 1 column=info:name, timestamp=1476773046344, value=zhangsan 2 column=info:age, timestamp=1476773051685, value=22 2 column=info:name, timestamp=1476773051661, value=lisi 3 column=info:age, timestamp=1476773052632, value=21 3 column=info:name, timestamp=1476773051709, value=wangswu 3 row(s) in 0.0610 seconds 创建Hive中与HBase中对应的表 SEThbase.zookeeper.quorum=hadoop001; SETzookeeper.znode.parent=/hbase; ADDjar/opt/bigdata/hive-1.2.1-bin/lib/hive-hbase-handler-1.2.1.jar; //user1表 CREATEEXTERNALTABLEuser1( rowkeystring, infomap<STRING,STRING> )STOREDBY'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITHSERDEPROPERTIES("hbase.columns.mapping"=":key,info:") TBLPROPERTIES("hbase.table.name"="user1"); //user2表 CREATEEXTERNALTABLEuser2( rowkeystring, namestring, ageint )STOREDBY'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITHSERDEPROPERTIES("hbase.columns.mapping"=":key,info:name,info:age") TBLPROPERTIES("hbase.table.name"="user2"); 查询user1,user2表数据 查询user1表数据 select*fromuser1; 结果如下 OK 1{"age":"25","name":"zhangsan"} 2{"age":"22","name":"lisi"} 3{"age":"21","name":"wangswu"} Timetaken:0.467seconds,Fetched:3row(s) 查询user2表数据 select*fromuser2; 结果如下: OK 1zhangsan25 2lisi22 3wangswu21 Timetaken:0.087seconds,Fetched:3row(s) hive插入数据到hbase INSERTINTOTABLEuser1 SELECT'4'ASrowkey, map('name','lijin','age','22')ASinfo fromduallimit1; 本文作者:佚名 来源:51CTO

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

sparkStreaming与Kafka整合

createStream那几个参数折腾了我好久。。网上都是一带而过,最终才搞懂..关于sparkStreaming的还是太少,最终尝试成功。。。 首先启动zookeeper ./bin/zookeeper-server-start.sh config/zookeeper.properties & 启动kafka bin/kafka-server-start.sh config/server.properties & 创建一个topic ./kafka-topics.sh --create --zookeeper 192.168.77.133:2181 \ --replication-factor 1\ --partitions 1\ --topic yangsy 随后启动一个终端为9092的提供者 ./kafka-console-producer.sh --broker-list 192.168.77.133:9092 --topic yangsy 代码如下: import org.apache.spark.SparkConf import org.apache.spark.storage.StorageLevel import org.apache.spark.streaming.kafka.KafkaUtils import org.apache.spark.streaming.{Seconds, StreamingContext} /** * Created by root on 11/28/15. */ object SparkStreaming { def main(args: Array[String]) { /* val sparkConf = new SparkConf().setMaster("local").setAppName("cocapp") .set("spark.executor.memory", "1g") val sc = new StreamingContext(sparkConf, Seconds(20)) val lines = sc.textFileStream("/usr/local/spark-1.4.0-bin-2.5.0-cdh5.2.1/streaming") val words = lines.flatMap(_.split(" ")) val wordCounts = words.map(x => (x, 1)).reduceByKey(_ + _) wordCounts.print() sc.start() sc.awaitTermination()*/ //zookeeper的地址 val zkQuorum = "192.168.77.133:2181" //group_id可以通过kafka的conf下的consumer.properties中查找 val group ="test-consumer-group" //创建的topic 可以是一个或多个 val topics = "yangsy" val sparkConf = new SparkConf().setMaster("local").setAppName("cocapp").set("spark.executor.memory", "1g") val sc = new StreamingContext(sparkConf, Seconds(2)) val numThreads = 2 val topicpMap = topics.split(",").map((_, numThreads.toInt)).toMap //StorageLevel.MEMORY_AND_DISK_SER为存储的级别 val lines = KafkaUtils.createStream(sc, zkQuorum, group, topicpMap, StorageLevel.MEMORY_AND_DISK_SER).map(_._2) //对于收到的消息进行wordcount val words = lines.flatMap(_.split(" ")) val pairs = words.map(word => (word, 1)) val wordCounts = pairs.reduceByKey(_ + _) wordCounts.print() sc.start() sc.awaitTermination() } } 随后再你启动的kafka的生产者终端随便输入消息,我这里设置的参数是每2秒获取一次,统计一次单词个数~OK~

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

MySQL 备份思路整合工具

通过go封装的一套基于MySQL备份的思路工具,可以实现以下内容: Backup_Mysqldump_All 该程序为mysqldump原生的全库数据库备份程序。 Backup_Mysqldump_One 该程序为mysqldump原生的单个数据库备份程序。 3. Backup_Mydumper_MultiThread_Database_All 该程序为多线程全量数据库备份程序 4. Backup_Mydumper_MultiThread_Database_One 该程序为多线程单库全量数据库备份程序 5. Backup_XtraBackup_add 该程序为XtraBackup增量备份程序,用于提供MySQL数据库的全量+增量备份程序 全量 增量 单库备份 多库备份 全库备份 binlog备份 文件备份 应该差不多能覆盖所有的MySQL备份需求了吧。 具体来项目查看readme.md 欢迎star 因为用到的都是开源的技术整理了一下也算是回馈开源 也是第一次回馈开源 GitHub链接:https://github.com/heike-07/Backup-tools gitee链接:https://gitee.com/heike07code/Backup-tools 感谢大家支持!

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

Spring+Hibernate+Jersey整合

导入需要的jar包 项目结构 Spring配置 classpath:database.propertiescom.test.bean${hibernate.dialect}${hibernate.show_sql}${hibernate.format_sql} 数据库连接配置 jdbc.driverClassName=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8 jdbc.username=root jdbc.password=root jdbc.initialPoolSize=30 jdbc.minPoolSize=20 jdbc.maxPoolSize=100 jdbc.maxIdleTime=600 jdbc.maxStatements=200 jdbc.acquireIncrement=10 hibernate.dialect=org.hibernate.dialect.MySQLDialect hibernate.show_sql=false hibernate.format_sql=true log4j配置 #log4j.rootLogger=DEBUG,A1,R log4j.rootLogger=INFO,A1,R log4j.logger.com.augmentum=DEBUG log4j.appender.A1=org.apache.log4j.ConsoleAppender log4j.appender.A1.layout=org.apache.log4j.PatternLayout log4j.appender.A1.layout.ConversionPattern=[%d%6pat%C.%M(%F:%L)]%m%n log4j.appender.R=org.apache.log4j.RollingFileAppender log4j.appender.R.File=C://logs//a.log log4j.appender.R.Append=true log4j.appender.R.DatePattern=.yyyy-MM-dd.log log4j.appender.R.layout=org.apache.log4j.PatternLayout log4j.appender.R.layout.ConversionPattern=[%d%6pat%C.%M(%F:%L)]%m%n web.xml配置 testindex.htmlcontextConfigLocationclasspath:applicationContext.xmlorg.springframework.web.context.ContextLoaderListenerJerseyServletcom.sun.jersey.spi.spring.container.servlet.SpringServletcom.sun.jersey.config.property.packagescom.test.resourceJerseyServlet/resource/* Javabean packagecom.test.bean; importjavax.persistence.Column; importjavax.persistence.Entity; importjavax.persistence.GeneratedValue; importjavax.persistence.GenerationType; importjavax.persistence.Id; importjavax.persistence.Table; @Entity @Table(name="user") publicclassUser{ @Id @GeneratedValue(strategy=GenerationType.AUTO) @Column(name="id") privateIntegerid; @Column(name="username") privateStringusername; @Column(name="password") privateStringpassword; @Override publicStringtoString(){ return"User[id="+id+",username="+username+",password="+password+"]"; } publicIntegergetId(){ returnid; } publicvoidsetId(Integerid){ this.id=id; } publicStringgetUsername(){ returnusername; } publicvoidsetUsername(Stringusername){ this.username=username; } publicStringgetPassword(){ returnpassword; } publicvoidsetPassword(Stringpassword){ this.password=password; } } Dao层 basedao packagecom.test.dao; importjava.io.Serializable; importjava.util.List; /** *Thebaseinterfaceforallthedaolayerinterface,itprovidecommonmethod * *@authorIrwin.Ai * *@param*Theentityclasstype *@param*Theprimarykeyoftheentityclass */ publicinterfaceBaseDao{ publicTadd(Tt); publicvoiddelete(Tt); publicTload(PKid); publicTget(PKid); publicListloadAll(); publicTupdate(Tt); } userdao packagecom.test.dao; importcom.test.bean.User; publicinterfaceUserDaoextendsBaseDao{ } Dao层实现 basedao实现 packagecom.test.dao.impl; importjava.io.Serializable; importjava.lang.reflect.ParameterizedType; importjava.lang.reflect.Type; importjava.util.List; importjavax.annotation.Resource; importorg.hibernate.Session; importorg.springframework.orm.hibernate3.HibernateTemplate; importorg.springframework.stereotype.Repository; importcom.test.dao.BaseDao; /** *Thebaseinterfaceimplementforallthedaolayerinterfaceimplements,it *providecommonmethod * *@authorIrwin.Ai * *@param*Theentityclasstype *@param*Theprimarykeyoftheentityclass */ @Repository publicclassBaseDaoImplimplementsBaseDao{ privateClassentityClass; privateHibernateTemplatehibernateTemplate; publicHibernateTemplategetHibernateTemplate(){ returnhibernateTemplate; } @Resource publicvoidsetHibernateTemplate(HibernateTemplatehibernateTemplate){ this.hibernateTemplate=hibernateTemplate; } /** *Methodtojudgethetypeofclass */ @SuppressWarnings("unchecked") publicBaseDaoImpl(){ Typetype=getClass().getGenericSuperclass(); if(typeinstanceofParameterizedType){ Type[]types=((ParameterizedType)type).getActualTypeArguments(); this.entityClass=(Class)types[0]; } } @Override publicTadd(Tt){ hibernateTemplate.save(t); returnt; } @Override publicvoiddelete(Tt){ hibernateTemplate.delete(t); } @Override publicTload(PKid){ returnhibernateTemplate.load(entityClass,id); } @Override publicListloadAll(){ returnhibernateTemplate.loadAll(entityClass); } @Override publicTupdate(Tt){ hibernateTemplate.update(t); returnt; } @Override publicTget(PKid){ returnhibernateTemplate.get(entityClass,id); } /** *Ifthereisasessionalive,wewilluseitinsteadofopenannew *Session. * *@return */ publicSessiongetCurrentSession(){ Sessionsession=hibernateTemplate.getSessionFactory() .getCurrentSession(); if(session==null){ session=hibernateTemplate.getSessionFactory().openSession(); } returnsession; } } userdao实现 packagecom.test.dao.impl; importorg.springframework.stereotype.Repository; importcom.test.bean.User; importcom.test.dao.UserDao; @Repository publicclassUserDaoImplextendsBaseDaoImplimplementsUserDao{ } service层 baseservice packagecom.test.service; importjava.io.Serializable; importjava.util.List; /** **Thebaseinterfaceforalltheservicelayerinterface,itprovidecommon *method * *@authorIrwin.Ai * *@param*Theentityclasstype *@param*Theprimarykeyoftheentityclass */ publicinterfaceBaseService{ publicTadd(Tt); publicvoiddelete(Tt); publicTload(PKid); publicTget(PKid); publicListloadAll(); publicTupdate(Tt); } userservice packagecom.test.service; importcom.test.bean.User; publicinterfaceUserServiceextendsBaseService{ } service层实现 baseservice实现 packagecom.test.service.impl; importjava.io.Serializable; importjava.util.List; importcom.test.dao.BaseDao; importcom.test.service.BaseService; /** **Thebaseinterfaceimplementforalltheservicelayerinterface *implements,itprovidecommonmethod * *@authorIrwin.Ai * *@param*Theentityclasstype *@param*Theprimarykeyoftheentityclass */ publicclassBaseServiceImplimplements BaseService{ privateBaseDaobaseDao; publicBaseDaogetBaseDao(){ returnbaseDao; } publicvoidsetBaseDao(BaseDaobaseDao){ this.baseDao=baseDao; } @Override publicTadd(Tt){ returnbaseDao.add(t); } @Override publicvoiddelete(Tt){ baseDao.delete(t); } @Override publicTload(PKid){ returnbaseDao.load(id); } @Override publicListloadAll(){ returnbaseDao.loadAll(); } @Override publicTupdate(Tt){ returnbaseDao.update(t); } @Override publicTget(PKid){ returnbaseDao.get(id); } } userservice实现 packagecom.test.service.impl; importjavax.annotation.Resource; importorg.springframework.stereotype.Service; importcom.test.bean.User; importcom.test.dao.UserDao; importcom.test.service.UserService; @Service publicclassUserServiceImplextendsBaseServiceImplimplementsUserService{ @Resource publicvoidsetBaseDao(UserDaouserDao){ super.setBaseDao(userDao); } } jersey resource类示例 packagecom.test.resource; importjava.util.List; importjavax.annotation.Resource; importjavax.ws.rs.GET; importjavax.ws.rs.Path; importjavax.ws.rs.Produces; importjavax.ws.rs.core.MediaType; importorg.apache.log4j.Logger; importorg.springframework.stereotype.Controller; importcom.google.gson.Gson; importcom.sun.jersey.spi.resource.Singleton; importcom.test.bean.User; importcom.test.service.UserService; @Path("/users") @Singleton @Controller publicclassUserResource{ privatestaticLoggerlogger=Logger.getLogger(UserResource.class); @Resource privateUserServiceuserService; @GET @Produces(MediaType.TEXT_PLAIN) publicStringgetAllUser(){ Listlist=null; Stringstr=null; try{ list=userService.loadAll(); str=newGson().toJson(list); }catch(Exceptione){ logger.error("loadallexception:",e); } returnstr; } } 页面访问测试 我们现在访问页面http://localhost:8080/SSJTest/resource/users 取到返回的json数据。

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

Spark整合Ray思路漫谈

作者:祝威廉,资深数据架构,11年研发经验。同时维护和开发多个开源项目。擅长大数据/AI领域的一些思路和工具。现专注于构建集大数据和机器学习于一体的综合性平台,降低AI落地成本相关工作上。 什么是Ray 之前花了大概两到三天把Ray相关的论文,官网文档看了一遍,同时特意去找了一些中文资料看Ray当前在国内的发展情况(以及目前国内大部分人对Ray的认知程度)。 先来简单介绍下我对Ray的认知。 首先基因很重要,所以我们先需要探查下Ray最初是为了解决什么问题而产生的。Ray的论文显示,它最早是为了解决增强学习的挑战而设计的。增强学习的难点在于它是一个需要边学习,边做实时做预测的应用场景,这意味会有不同类型的tasks同时运行,并且他们之间存在复杂的依赖关系,tasks会在运行时动态产生产生新的tasks,现有的一些计算模型肯定是没办法解决的

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

JS基础知识整合

1、执行环境:有时也叫环境,是JavaScript中最为重要的一个概念,执行环境定义了变量或函数有权访问的其他数据。 2、变量对象:每一个执行环境都有一个与之关联的变量对象,环境中定义的所有的变量和函数都保存在这个的对象中。 3、作用域链:代码在环境中执行时,会创建变量对象的作用域链,保证对执行环境有权访问的所有变量和函数的有序访问。作用域链的前端,始终是当前执行代码所在环境的变量对象。 4、活动对象:如果当前执行环境是函数,则将活动对象作为变量对象。 5、可执行代码: 1)全局代码:例如加载外部的JS文件或者本地标签内的代码,全局代码不包括function体内的代码; 2)函数代码:function体内的代码; 3) eval代码:eval()函数计算某个字符串,并执行其中的JS代码,比如 eval("alert('helloworld')")。 6、执行上下文栈:在一个JS程序中,必定会产生多个执行上下文,JS引擎会以栈的方式来处理它们,也就是执行上下文栈。 7、作用域:JS是一种没有块级作用域的语言(包括if、for等语句的花括号代码块或者单独的花括号代码块都不能形成一个局部作用域),所以js的局部作用域的形成有且只有函数的花括号内定义的代码块形成的,既函数作用域。 8、作用域链:是作用域规则的实现,通过作用域链的实现,变量在它的作用域内可被访问,函数在它的作用域内可被调用。 作用域链是一个只能单向访问的链表,这个链表上的每个节点就是执行上下文的变量对象,单向链表的头部(可被第一个访问的节点)始终都是当前正在被调用执行的函数的变量对象(活动对象),尾部始终是全局活动对象。 9、闭包:函数对象可以通过作用域链相互关联起来,函数体内的数据(变量和函数声明)都可以保存在函数作用域内,这种特性在计算机科学文献中被称为“闭包”。 从技术角度来说,JS的函数都是闭包:函数都是对象,都关联到作用域链,函数内数据都被保存在函数作用域内。

资源下载

更多资源
Oracle

Oracle

Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的、适应高吞吐量的数据库方案。

Eclipse

Eclipse

Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。

JDK

JDK

JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。