diff --git a/common/pom.xml b/common/pom.xml index a639e06..e9543c1 100644 --- a/common/pom.xml +++ b/common/pom.xml @@ -26,68 +26,9 @@ 1.8 1.8 1.8 - 3.4.1 - 1.3.0 - - - - org.springframework.cloud - spring-cloud-starter-bus-amqp - - - - org.springframework.cloud - spring-cloud-starter-config - - - - org.springframework.cloud - spring-cloud-starter-eureka - - - - org.springframework.cloud - spring-cloud-starter-feign - - - org.springframework.cloud - spring-cloud-starter-ribbon - - - - org.springframework.boot - spring-boot-starter-actuator - - - org.springframework.cloud - spring-cloud-starter-hystrix - - - - org.springframework.cloud - spring-cloud-starter-sleuth - - - org.springframework.cloud - spring-cloud-starter-zipkin - - - io.zipkin.java - zipkin-autoconfigure-ui - runtime - - - - org.springframework.boot - spring-boot-starter-data-redis - - - org.springframework.session - spring-session-data-redis - org.springframework.boot @@ -147,10 +88,57 @@ tomcat-embed-el + + + com.google.guava + guava + 20.0 + + + + + org.apache.commons + commons-lang3 + 3.5 + + + + + commons-collections + commons-collections + 3.2.1 + + + + joda-time + joda-time + 2.3 + + + + + org.hashids + hashids + 1.0.1 + + + + + commons-net + commons-net + 3.1 + + + + + commons-fileupload + commons-fileupload + 1.2.2 + commons-io commons-io - 2.4 + 2.0.1 @@ -175,6 +163,7 @@ spring-boot-starter-test test + diff --git a/common/src/main/java/com/micro/fast/common/CommonApplication.java b/common/src/main/java/com/micro/fast/common/CommonApplication.java index cbdd424..3e3ed59 100644 --- a/common/src/main/java/com/micro/fast/common/CommonApplication.java +++ b/common/src/main/java/com/micro/fast/common/CommonApplication.java @@ -1,14 +1,19 @@ package com.micro.fast.common; -import org.springframework.boot.SpringApplication; -import org.springframework.cloud.client.SpringCloudApplication; -import org.springframework.cloud.netflix.feign.EnableFeignClients; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; -@SpringCloudApplication -@EnableFeignClients +/** + * 配置类,该类将配置与META-INF/spring.factories文件中用于被EnableAutoConfiguration注解所识别实现自动配置 + * create by lishouyu 2017/09/09 + * email 18332763730@163.com + * + * last edit lishouyu 2017/09/09 + * email 18332763730@163.com + * + */ +@Configuration +@ComponentScan(basePackages = {"com.micro.fast.common.config"}) public class CommonApplication { - public static void main(String[] args) { - SpringApplication.run(CommonApplication.class, args); - } } diff --git a/common/src/main/java/com/micro/fast/common/config/DataSourceConfig.java b/common/src/main/java/com/micro/fast/common/config/DataSourceConfig.java new file mode 100644 index 0000000..29a8649 --- /dev/null +++ b/common/src/main/java/com/micro/fast/common/config/DataSourceConfig.java @@ -0,0 +1,132 @@ +package com.micro.fast.common.config; + +import com.alibaba.druid.pool.DruidDataSource; +import com.alibaba.druid.support.http.StatViewServlet; +import com.alibaba.druid.support.http.WebStatFilter; +import com.alibaba.druid.support.spring.stat.DruidStatInterceptor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.web.servlet.FilterRegistrationBean; +import org.springframework.boot.web.servlet.ServletRegistrationBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; + +import javax.sql.DataSource; +import java.sql.SQLException; +import java.util.HashMap; +import java.util.Map; + +/** + * 替换默认的数据源,使用自定义的druid数据源 + * create by lishouyu 2017/09/09 + * email 18332763730@163.com + * + * last edit lishouyu 2017/09/09 + * email 18332763730@163.com + * + */ +@Configuration +public class DataSourceConfig { + private static final Logger logger = LoggerFactory.getLogger(DataSourceConfig.class); + + @Autowired + private JdbcConnectionConfig jdbcConnectionConfig; + + /** + * druid的servlet的配置 + * @return + */ + @Bean + public ServletRegistrationBean servletRegistrationBean(){ + ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(); + //注册servlet + servletRegistrationBean.setServlet(new StatViewServlet()); + + //设置servlet初始化的参数 + Map initParams = new HashMap<>(); + //设置登录密码 + initParams.put("loginUsername","root"); + initParams.put("loginPassword","studyj2e"); + //设置能否重置 + initParams.put("resetEnable","false"); + //deny优先于allow + initParams.put("allow","127.0.0.1"); + initParams.put("deny","213.122.232.233"); + servletRegistrationBean.setInitParameters(initParams); + + //设置servlet的地址 + servletRegistrationBean.addUrlMappings("/druid/*"); + return servletRegistrationBean; + } + + /** + * druid过滤器的配置 + * @return + */ + @Bean + public FilterRegistrationBean filterRegistrationBean() { + FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(); + filterRegistrationBean.setFilter(new WebStatFilter()); + Map initParams = new HashMap<>(); + //设置忽略请求 + initParams.put("exclusions", "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/static/*,/druid/*"); + filterRegistrationBean.setInitParameters(initParams); + filterRegistrationBean.addUrlPatterns("/*"); + return filterRegistrationBean; + } + + /** + * 根据BeanId来拦截配置 用来bean的监控 + * @return + */ + @Bean(value = "druid-stat-interceptor") + public DruidStatInterceptor druidStatInterceptor(){ + DruidStatInterceptor druidStatInterceptor = new DruidStatInterceptor(); + return druidStatInterceptor; + } + + /** + * 设置要拦截统计的bean + * @return + */ + @Bean + public BeanNameAutoProxyCreator beanNameAutoProxyCreator(){ + BeanNameAutoProxyCreator beanNameAutoProxyCreator = new BeanNameAutoProxyCreator(); + beanNameAutoProxyCreator.setProxyTargetClass(true); + //设置要监控的bean的id + beanNameAutoProxyCreator.setBeanNames("userController"); + //要使用的拦截器 + beanNameAutoProxyCreator.setInterceptorNames("druid-stat-interceptor"); + return beanNameAutoProxyCreator; + } + + @Bean(name = "dataSource") + @Primary + public DataSource druidDataSource(){ + DruidDataSource druidDataSource = new DruidDataSource(); + //数据库连接的相关配置 + druidDataSource.setUsername(jdbcConnectionConfig.getUsername()); + druidDataSource.setPassword(jdbcConnectionConfig.getPassword()); + druidDataSource.setUrl(jdbcConnectionConfig.getUrl()); + druidDataSource.setDriverClassName(jdbcConnectionConfig.getDriverClass()); + //连接池的具体配置 + druidDataSource.setDefaultAutoCommit(true); + druidDataSource.setInitialSize(20); + druidDataSource.setMaxActive(50); + druidDataSource.setMinIdle(10); + druidDataSource.setMaxWait(10); + druidDataSource.setMinEvictableIdleTimeMillis(3600000); + try { + druidDataSource.setFilters("stat,wall"); + } catch (SQLException e) { + if(logger.isErrorEnabled()){ + logger.error("设置过滤器失败",e); + } + } + return druidDataSource; + } + +} diff --git a/common/src/main/java/com/micro/fast/common/config/JdbcConnectionConfig.java b/common/src/main/java/com/micro/fast/common/config/JdbcConnectionConfig.java new file mode 100644 index 0000000..671d0f7 --- /dev/null +++ b/common/src/main/java/com/micro/fast/common/config/JdbcConnectionConfig.java @@ -0,0 +1,64 @@ +package com.micro.fast.common.config; + +import org.springframework.boot.autoconfigure.AutoConfigureBefore; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; +import org.springframework.validation.annotation.Validated; + +import javax.validation.constraints.NotNull; + +/** + * 对jdbc连接参数进行从配置文件中读取,校验不能为空 + * create by lishouyu 2017/09/09 + * email 18332763730@163.com + * + * last edit lishouyu 2017/09/09 + * email 18332763730@163.com + * + */ +@Configuration +@AutoConfigureBefore(com.micro.fast.common.config.DataSourceConfig.class) +@ConfigurationProperties(prefix = "jdbc") +@Validated +public class JdbcConnectionConfig { + @NotNull + private String username; + @NotNull + private String password; + @NotNull + private String url; + @NotNull + private String driverClass; + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public String getDriverClass() { + return driverClass; + } + + public void setDriverClass(String driverClass) { + this.driverClass = driverClass; + } +} diff --git a/common/src/main/java/com/micro/fast/common/config/SqlSessionFactoryConfig.java b/common/src/main/java/com/micro/fast/common/config/SqlSessionFactoryConfig.java new file mode 100644 index 0000000..909ff6a --- /dev/null +++ b/common/src/main/java/com/micro/fast/common/config/SqlSessionFactoryConfig.java @@ -0,0 +1,77 @@ +package com.micro.fast.common.config; + +import com.github.pagehelper.PageHelper; +import org.apache.ibatis.plugin.Interceptor; +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.core.io.support.ResourcePatternResolver; +import org.springframework.jdbc.datasource.DataSourceTransactionManager; +import org.springframework.transaction.PlatformTransactionManager; +import org.springframework.transaction.annotation.EnableTransactionManagement; +import org.springframework.transaction.annotation.TransactionManagementConfigurer; + +import javax.sql.DataSource; +import java.io.IOException; +import java.util.Properties; + +@Configuration +@EnableTransactionManagement +public class SqlSessionFactoryConfig implements TransactionManagementConfigurer{ + @Autowired + private DataSource dataSource; + + @Bean(name = "sqlSessionFactory") + @Primary + public SqlSessionFactory sqlSessionFactory(){ + SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean(); + //注入数据源 + sqlSessionFactoryBean.setDataSource(dataSource); + //设置实体类所在的位置 + sqlSessionFactoryBean.setTypeAliasesPackage("com.kklt.pojo"); + //设置mapper映射文件的位置 + ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); + try { + sqlSessionFactoryBean.setMapperLocations( + resolver.getResources("classpath:/mappers/*.xml")); + } catch (IOException e) { + e.printStackTrace(); + } + //设置分页插件 + PageHelper pageHelper = new PageHelper(); + Properties properties = new Properties(); + properties.setProperty("dialect","mysql"); + pageHelper.setProperties(properties); + sqlSessionFactoryBean.setPlugins(new Interceptor[]{pageHelper}); + //设置详细的配置 + org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration(); + configuration.setMapUnderscoreToCamelCase(true); + configuration.setUseColumnLabel(true); + configuration.setUseGeneratedKeys(true); + //将详细配置放入到sqlSessionFactoryBean中 + sqlSessionFactoryBean.setConfiguration(configuration); + SqlSessionFactory sqlSessionFactory = null; + try { + sqlSessionFactory = sqlSessionFactoryBean.getObject(); + } catch (Exception e) { + e.printStackTrace(); + } + return sqlSessionFactory; + } + + + + /** + * 向事务管理器中注入数据源,由spring来进行事务管理 + */ + @Override + @Bean("transactionManager") + @Primary + public PlatformTransactionManager annotationDrivenTransactionManager() { + return new DataSourceTransactionManager(dataSource); + } +} diff --git a/common/src/main/java/com/micro/fast/common/util/AESUtil.java b/common/src/main/java/com/micro/fast/common/util/AESUtil.java index 7392fa7..84569b3 100644 --- a/common/src/main/java/com/micro/fast/common/util/AESUtil.java +++ b/common/src/main/java/com/micro/fast/common/util/AESUtil.java @@ -19,7 +19,6 @@ import java.security.SecureRandom; * * last edit lishouyu 2017/08/21 * email 18332763730@163.com - * */ public class AESUtil { //编码规则 @@ -135,15 +134,4 @@ public class AESUtil { return null; } - public static void main(String[] args) { - String[] keys = new String[]{"studyj2e"}; - System.out.println("key | AESEncode | AESDecode"); - for (String key : keys) { - System.out.print(key+" | "); - String aesEncode = AESEncode(key); - System.out.print(aesEncode+" | "); - String aesDecode = AESDecode(aesEncode); - System.out.println(aesDecode); - } - } } diff --git a/common/src/main/java/com/micro/fast/common/util/WatermarkerUtil.java b/common/src/main/java/com/micro/fast/common/util/WatermarkerUtil.java index 96cf96a..0323e25 100644 --- a/common/src/main/java/com/micro/fast/common/util/WatermarkerUtil.java +++ b/common/src/main/java/com/micro/fast/common/util/WatermarkerUtil.java @@ -1,7 +1,7 @@ package com.micro.fast.common.util; -import com.sun.image.codec.jpeg.JPEGCodec; -import com.sun.image.codec.jpeg.JPEGImageEncoder; + + import javax.imageio.ImageIO; import java.awt.*; @@ -38,13 +38,13 @@ public class WatermarkerUtil { */ private Color fontColor = Color.WHITE; /** - * 默认的水印右侧距离原图最右边的距离 + * 默认的水印左侧距离原图最左边的距离 */ - private int x = 10; + private int x = 5; /** * 默认的水印的下侧距离原图下侧的距离 */ - private int y = 10; + private int y = 5; /** * 默认的透明度 */ @@ -87,13 +87,14 @@ public class WatermarkerUtil { } //7.设置水印透明的样式 graphics.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,alpha)); - //8.将文字画在图片之上,放在右下角.参数x表示是文字的左侧距离图片左侧的距离,文字的右侧表示是文字的下侧距离图片上册的距离 - graphics.drawString(text,width-(x+textLength),height-(y)); + //8.将文字画在图片之上,放在右下角.参数x表示是文字的左侧距离图片左侧的距离,文字的右侧表示是文字的下侧距离图片上侧的距离 + graphics.drawString(text,x,height-(y)); graphics.dispose(); //9.将bufferImage输出成文件,使用uuid避免文件名重复 file = new File(filePath + "/" + UUID.randomUUID()+ imageName); - JPEGImageEncoder img = JPEGCodec.createJPEGEncoder(new FileOutputStream(file)); - img.encode(bufferedImage); + int lastIndexOf = imageName.lastIndexOf("."); + String extensionName = imageName.substring(lastIndexOf+1); + ImageIO.write(bufferedImage,extensionName,new FileOutputStream(file)); //10.返回加上水印之后的图片文件对象 return file; } catch (IOException e) { @@ -121,8 +122,9 @@ public class WatermarkerUtil { textWidth +=0.5F; } } - //2.等同的中文字符向上取整然后乘于单个字符的宽度 - return (int) Math.ceil(textWidth)*fontSize; + + //2.等同的中文字符向上取整然后乘于单个中文字符的宽度, + return Math.round(textWidth)*fontSize; } public String getFontFamily() { diff --git a/common/src/main/resources/META-INF/spring.factories b/common/src/main/resources/META-INF/spring.factories new file mode 100644 index 0000000..cde5eb6 --- /dev/null +++ b/common/src/main/resources/META-INF/spring.factories @@ -0,0 +1,2 @@ +# 自动化装配 +org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.micro.fast.common.CommonApplication \ No newline at end of file diff --git a/common/src/test/java/com/micro/fast/common/CommonApplicationTests.java b/common/src/test/java/com/micro/fast/common/CommonApplicationTests.java deleted file mode 100644 index cc7bb86..0000000 --- a/common/src/test/java/com/micro/fast/common/CommonApplicationTests.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.micro.fast.common; - -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -@RunWith(SpringRunner.class) -@SpringBootTest -public class CommonApplicationTests { - - @Test - public void contextLoads() { - } - -} diff --git a/common/src/test/java/com/micro/fast/common/util/AESUtilTest.java b/common/src/test/java/com/micro/fast/common/util/AESUtilTest.java new file mode 100644 index 0000000..39e28db --- /dev/null +++ b/common/src/test/java/com/micro/fast/common/util/AESUtilTest.java @@ -0,0 +1,25 @@ +package com.micro.fast.common.util; + +import org.junit.Test; + +import static org.junit.Assert.*; + +public class AESUtilTest { + @Test + public void AESEncode() throws Exception { + String[] keys = new String[]{"studyj2e"}; + System.out.println("key | AESEncode | AESDecode"); + for (String key : keys) { + System.out.print(key+" | "); + String aesEncode = AESUtil.AESEncode("li"); + System.out.print(aesEncode+" | "); + String aesDecode = AESUtil.AESDecode(aesEncode); + System.out.println(aesDecode); + } + } + + @Test + public void AESDecode() throws Exception { + } + +} \ No newline at end of file diff --git a/common/src/test/java/com/micro/fast/common/util/WatermarkerUtilTest.java b/common/src/test/java/com/micro/fast/common/util/WatermarkerUtilTest.java index ee49fef..ff6bb7b 100644 --- a/common/src/test/java/com/micro/fast/common/util/WatermarkerUtilTest.java +++ b/common/src/test/java/com/micro/fast/common/util/WatermarkerUtilTest.java @@ -9,7 +9,7 @@ import static org.junit.Assert.*; public class WatermarkerUtilTest { @Test public void markerWord() throws Exception { - new WatermarkerUtil().markerWord("李守余",new File("/root/dev/u=132629542,1898058257&fm=27&gp=0.jpg"),"/home"); + new WatermarkerUtil().markerWord("www.suixiangcang.com",new File("/root/dev/u=132629542,1898058257&fm=27&gp=0.jpg"),"/home"); } } \ No newline at end of file diff --git a/pom.xml b/pom.xml index cbc8e50..d0b923e 100644 --- a/pom.xml +++ b/pom.xml @@ -20,10 +20,10 @@ 1.8 + common config-server eureka-server eureka-server2 upms - common diff --git a/upms/pom.xml b/upms/pom.xml index ff761af..e40b48f 100644 --- a/upms/pom.xml +++ b/upms/pom.xml @@ -68,6 +68,11 @@ spring-boot-starter-test test + + com.micro.fast + common + 0.0.1-SNAPSHOT +